3

我需要 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 个允许我分别执行上述操作。

序列化对象签名

我已经研究过在全球范围内设置这些设置,但我运气不佳。

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

4

1 回答 1

4

JavaScriptDateTimeConverterJsonSerializerSettings'内部指定Converters属性:

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

实际上,JsonConverter内部采用数组的重载会创建 aJsonSerializerSettings并设置其 Converters 属性。

于 2013-03-09T20:55:10.697 回答