使用JSON.net控制最终输出的序列化



使用代码。。。

[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);
    }
}

相关内容

  • 没有找到相关文章

最新更新