【问题标题】:Why Does Newtonsoft.Json.JsonConvert.SerializeObject Surround Result With Quotes? [duplicate]为什么 Newtonsoft.Json.JsonConvert.SerializeObject 用引号包围结果? [复制]
【发布时间】:2020-05-13 02:11:06
【问题描述】:

此示例代码

DateTime date = new DateTime(2020, 01, 27);
string str = Newtonsoft.Json.JsonConvert.SerializeObject(date, Newtonsoft.Json.Formatting.None,
    new Newtonsoft.Json.JsonSerializerSettings() {
         DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat });

返回 str = "\"2020-01-27T00:00:00\"" - 因此字符串的内容用引号括起来(这里像调试器一样以转义形式编写)。

但我只想要 ISO 格式的日期和时间。为什么会有引号?我怎样才能避免它们而不删除它们?

我已经查找了所有序列化程序选项,但没有找到对我有帮助的选项...

【问题讨论】:

标签: c# json serialization json.net


【解决方案1】:

如果您查看 Json 的 Specification,您会注意到它不包含 DateTime 的正确定义。

这就是原因,默认情况下,Json.Net 使用 ISO 规范表示将 DateTime 表示为字符串。话虽如此,另一种表示是使用JavaScriptDateTimeConverter

这不完全是 ISO 规范,甚至不是根据规范的有效 JSON(在上面的链接中给出),但 Json.Net 确实支持它。例如,

var  data = new Person{Name= "ABC", Dob= new DateTime(2020, 01, 27)};
string str = Newtonsoft.Json.JsonConvert.SerializeObject(data,new JavaScriptDateTimeConverter());

输出

{"Name":"ABC","Dob":new Date(1580063400000)}

请注意,您还需要使用JavaScriptDateTimeConverter 进行反序列化。

var dt = JsonConvert.DeserializeObject<Person>(str,new JavaScriptDateTimeConverter());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-19
    • 2010-09-20
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2020-10-20
    • 2013-10-02
    • 2016-04-21
    相关资源
    最近更新 更多