提问人:Nick 提问时间:1/28/2020 更新时间:1/28/2020 访问量:2549
为什么 Newtonsoft.Json.JsonConvert.SerializeObject 用引号将结果括起来?[复制]
Why Does Newtonsoft.Json.JsonConvert.SerializeObject Surround Result With Quotes? [duplicate]
问:
此示例代码
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 格式的日期和时间。为什么会有引号?我怎样才能避免它们而不在事后删除它们?
我已经查找了所有序列化程序选项,但没有找到对我有帮助的选项......
答:
1赞
Anu Viswan
1/28/2020
#1
如果查找 Json 规范,您会注意到它不包含 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)}
请注意,您还需要使用 for 反序列化。JavaScriptDateTimeConverter
var dt = JsonConvert.DeserializeObject<Person>(str,new JavaScriptDateTimeConverter());
评论
DateTime
public class Constants { public const string IsoDateTimeFormat = "yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss.fffffff"; }