c# - Newtonsoft Json.NET ReferenceLoopHandling 和 JavascriptDateTimeConverter

标签 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

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

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

最佳答案

您在 JsonSerializerSettings 中使用 Converters 属性指定您的 JavaScriptDateTimeConverter:

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

实际上,采用 JsonConverter 数组的重载在内部创建了一个 JsonSerializerSettings 并设置了它的 Converters 属性。

关于c# - Newtonsoft Json.NET ReferenceLoopHandling 和 JavascriptDateTimeConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15315762/

相关文章:

c# - 如何在 DateTimePicker 中设置字体大小

c - 如何获取时区首字母?

json - 使用 JSON.Net 的 C# 到 JSON 序列化

c# - 序列化/反序列化嵌套 POCO 属性,而不嵌套在 json.net 中

azure - Microsoft.WindowsAzure.Storage (WindowsAzure.Storage) 9.1.1 在其依赖性之外调用 Newtonsoft 时失败

c# - 以正确的方式做干燥的事情

c# - 将实例化属性绑定(bind)到 UI

c# - 无法加载文件或程序集“MyAssembly.XmlSerializers

c# - 日期时间插入错误

C#等待生产者/消费者中的多个事件