使用代码。。。
[Test]
public void test()
{
var entity = new Foo();
var json = Newtonsoft.Json.JsonConvert.SerializeObject(entity);
}
针对以下琐碎的类结构。。。
public class Foo
{
public Foo() { FooDate = new DateTimeWrapper(); }
public DateTimeWrapper FooDate { get; set; }
}
public class DateTimeWrapper
{
public DateTimeWrapper() { DateTime = DateTime.Now; }
public DateTime DateTime { get; set; }
}
将json变量设置为…
{"FooDate":{"DateTime":"2013-08-30T13:36:15.4862093-05:00"}}
我想返回的JSON是…
{"FooDate":"2013-08-30T13:36:15.4862093-05:00"}
没有嵌入的DateTime部分。如何使用JSON.net来序列化到此自定义JSON,然后将上面的字符串反序列化为原始对象?
编辑
我知道对象结构可以被简化以产生所需的输出。但是,我希望生成具有给定对象结构的输出。这段代码是为了突出问题而编写的。我没有把所有的代码都放进去,也没有对此进行冗长的解释,因为它与这个问题无关。
正如我在评论中所说,通过创建自定义的JsonConverter可以很容易地完成
var entity = new Foo();
var json = JsonConvert.SerializeObject(entity, new DateTimeWrapperConverter());
public class DateTimeWrapperConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTimeWrapper);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
//Left as an exercise to the reader :)
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var obj = value as DateTimeWrapper;
serializer.Serialize(writer, obj.DateTime);
}
}