【发布时间】:2020-06-24 22:19:38
【问题描述】:
我只是尝试使用 C# 中的 Newtonsoft JSON 库将文件中的一些 JSON 反序列化为对象列表。以下是 MeetingFile.txt 文件的内容:
[
{
"People": [
{
"FirstName": "Malcolm",
"LastName": "Reynolds"
},
{
"FirstName": "Hoban",
"LastName": "Washburne"
}
],
"PairDate": "1/14/2016"
}
]
下面是反序列化对象图的代码:
using (var streamReader = new StreamReader(@"C:\Temp\MeetingFile.txt"))
{
var fileContents = streamReader.ReadToEnd();
var meetingHistory = JsonConvert.DeserializeObject<List<PairHistoryItem>>(fileContents);
var serialized = JsonConvert.SerializeObject(meetingHistory);
return meetingHistory;
}
还有课程:
public class Person
{
public readonly string FirstName;
public readonly string LastName;
public string FullName => $"{FirstName} {LastName}";
public List<IPairHistoryItem> PairHistory;
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}
public class PairHistoryItem
{
public List<Person> People { get; }
public DateTime PairDate { get; }
public PairHistoryItem(Person person1, Person person2, DateTime pairDate)
{
People = new List<Person> {person1, person2};
PairDate = pairDate;
}
}
但无论出于何种原因,这就是我的反序列化代码中的 serialized 变量中包含的内容:
[
{
"People": [
null,
null,
{
"FirstName": "Malcolm",
"LastName": "Reynolds",
"PairHistory": null,
"FullName": "Malcolm Reynolds"
},
{
"FirstName": "Hoban",
"LastName": "Washburne",
"PairHistory": null,
"FullName": "Hoban Washburne"
}
],
"PairDate": "2016-01-14T00:00:00"
}
]
列表开头的空值来自哪里?据我所知,我文件中的 JSON 格式正确。我是否缺少 JSON 转换器的一些设置?
【问题讨论】:
-
那些 RO 字段无法设置,在 Debug 中钻入
meetingHistory并且名称已经为空:i.stack.imgur.com/Gud9U.jpg 自然,当您重新序列化它时,它仍然是空的。 json 也没有与 person 类中的PairHistory相关的任何内容。 -
嗯,奇怪的是我有两个空对象以及正确填充的对象,如上所述。所以它并不是真正的只读属性,而是构造函数。 @Nikolai Samteladze 似乎在正确的轨道上。
标签: c# json serialization json.net