【发布时间】:2017-07-10 18:28:49
【问题描述】:
我在反序列化包含 JSON 序列化 LocalDate 对象的 JSON 字符串时看到异常(请参阅本问题的结尾以了解 JSON sn-p)。
这就是我反序列化的方式:
var settings = new JsonSerializerSettings();
settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
var output = JsonConvert.DeserializeObject<MyObject>(json, settings);
我看到这条异常消息:
NodaTime.Utility.InvalidNodaDataException: '意外的令牌解析 LocalDate。预期的字符串,得到了 StartObject。'
这是 MyObject 类:
class MyObject
{
public LocalDate Date { get; set; }
public string AnotherProperty { get; set; }
}
这是我试图反序列化的 JSON sn-p:
{
"Date": {
"Calendar": {
"Id": "ISO",
"Name": "ISO",
"MinYear": -9998,
"MaxYear": 9999,
"Eras": [{
"Name": "BCE"
}, {
"Name": "CE"
}]
},
"Year": 2017,
"Month": 7,
"Day": 10,
"DayOfWeek": 1,
"YearOfEra": 2017,
"Era": {
"Name": "CE"
},
"DayOfYear": 191
},
"AnotherProperty": "A string"
}
【问题讨论】:
-
我已经用 MyObject 的定义更新了问题
-
只需创建一个简单的 LocalDate 类并对其进行序列化。现在将结果与您提供的 json 进行比较。
NodaTime.LocalDate d = new NodaTime.LocalDate(); var json = JsonConvert.SerializeObject(d, Newtonsoft.Json.Formatting.Indented); -
@L.B - 我在反序列化过程中遇到了这个问题,而不是序列化
-
我知道。我读了你的问题。我要说的是:您得到的 json 与您发布的不同。那么你希望如何正确地反序列化它。
-
进一步了解您的意思,我意识到设置对象(因为它在问题中)也需要传递到 SerializeObject。这是因为 .NET 的内置 Json 转换器对 LocalDate 的序列化与 DeserializeObject 的预期不同。
标签: c# json serialization nodatime