public class Student
{
public string Name { get; set;} = "ABCD";
public List<Subject> Subjects {get; set;}
public Student()
{
Subjects = new List<Subject>();
SetDefaultSubject();
}
private void SetDefaultSubject()
{
this.Subjects.Add(new Subject(){Name = "English"});
this.Subjects.Add(new Subject(){Name = "Maths"});
}
}
public class Subject
{
public string Name {get; set;}
}
我有一个看起来像这样的Json字符串
var jsonStudentData = @"{""Name"":""ABC"",""Subjects"":[{""Name"":""English""},{""Name"":""Maths""},{""Name"":""Hindi""},{""Name"":""Social Studies""}]}";
这是我的代码,我正在反序列化jsonStudentData
JsonConvert.DeserializeObject<Student>(jsonStudentData);
我正在收到输出 名字= ABC, 科目[英语,数学,英语,数学,印地语,社会研究]
但我想要输出
姓名= ABC, 科目[英语,数学,印地语,社会研究]
我在这做错了什么。
答案 0 :(得分:1)
嗯,你的期望是不正确的。基本上,JSON解串器 - 完全合理地,IMO - 执行的代码相当于:
var student = new Student
{
Name = "ABC",
Subjects =
{
// Each line here will just call Add
new Subject { Name = "English" },
new Subject { Name = "Maths" },
new Subject { Name = "Hindi" },
new Subject { Name = "Social Studies" },
}
};
这就是你的JSON基本上应该做的事情。无论JSON说什么,这都是您的SetDefaultSubjects
添加更多信息。
我个人建议您从构造函数中移除对SetDefaultSubjects
的调用 - 也许添加CreateStudentWithDefaultSubjects
的工厂方法。
您也可以考虑将List
设置为某种类型(例如HashSet
)并使Subject
实施IEquatable<Subject>
,以便您可以添加重复项,并且它们可以我会被忽略。
答案 1 :(得分:0)
或者,您可以使用C#函数进行反序列化。
程序集:System.Web.Extensions(在System.Web.Extensions.dll中)
strncat(dateTime, incoming + 3, 2);