1

使用代码...

[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 并随后将上述字符串反序列化为原始对象?

编辑

我知道可以简化对象结构以产生所需的输出。但是,我想使用给定的对象结构生成输出。这段代码被归结为突出问题。我没有放所有代码,也没有对它进行冗长的解释,因为它与问题无关。

4

1 回答 1

3

正如我在评论中所说,可以通过创建自定义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);
    }
}
于 2013-08-30T19:39:13.973 回答