Newtonsoft Json.NET ReferenceLoopHandling和JavascriptDateTimeConverter

时间:2013-03-09 20:48:45

标签: c# datetime json.net

我需要Json.NET使用JavaScriptDateTimeConverter和ReferenceLoopHandling.Ignore进行序列化。据我所知,JsonConvert.SerializeObject上的任何签名都不允许同时设置这两个设置。

我能做到:

var json = JsonConvert.SerializeObject(this.Data, new JavaScriptDateTimeConverter());

或者我能做到:

var json = JsonConvert.SerializeObject(this.Data, new JsonSerializerSettings()
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Serialize
            });

但我不能两者兼顾。我为SerializeObject获得的签名如下。第6和第5个允许我分别做以上。

SerializeObject signatures

我已经考虑过全局设置这些设置,但我没有太多运气。

任何人都知道使用这两种设置进行序列化的方法吗?

1 个答案:

答案 0 :(得分:4)

您使用JavaScriptDateTimeConverter属性在JsonSerializerSettings'内指定Converters

var json = JsonConvert.SerializeObject(this.Data, new JsonSerializerSettings()
{
    Converters = new List<JsonConverter> { new JavaScriptDateTimeConverter() },
    ReferenceLoopHandling = ReferenceLoopHandling.Serialize
});

实际上,JsonConverter数组内部的重载会创建一个JsonSerializerSettings并设置其转换器属性。