C# Json反序列化的don';t覆盖属性中的默认值

C# Json反序列化的don';t覆盖属性中的默认值,c#,json,serialization,deserialization,C#,Json,Serialization,Deserialization,这是我反序列化jsonStudentData的代码 var jsonStudentData = @"{""Name"":""ABC"",""Subjects"":[{""Name"":""English""},{""Name"":""Maths""},{""Name"":""Hindi""},{""Name"":""Social Studies""}]}"; JsonConvert.DeserializeObject(jsonStudentData); 我正在获取输出 名称=ABC, 科目[

这是我反序列化jsonStudentData的代码

var jsonStudentData = @"{""Name"":""ABC"",""Subjects"":[{""Name"":""English""},{""Name"":""Maths""},{""Name"":""Hindi""},{""Name"":""Social Studies""}]}";
JsonConvert.DeserializeObject(jsonStudentData);
我正在获取输出
名称=ABC, 科目[英语,数学,英语,数学,印地语,社会研究]

但我想要输出

名称=ABC, 科目[英语、数学、印地语、社会研究]


我做错了什么吗。

好吧,你的期望是不正确的。基本上,JSON反序列化程序完全合理地执行代码,相当于:

JsonConvert.DeserializeObject<Student>(jsonStudentData);
JSON基本上就是这么说的。无论JSON怎么说,都是您的
SetDefaultSubjects
添加了更多信息

我个人建议您从构造函数中删除对
SetDefaultSubjects
的调用-也许可以添加一个工厂方法
CreateStudentWithDefaultSubjects


你也可以考虑让你的<代码>列表>代码>一组(例如,代码> HasSET//Cube),并使主题实现代码> IEQuabtI/C> >,这样你就可以添加重复,它们将被忽略。 程序集:System.Web.Extensions(在System.Web.Extensions.dll中)

string jsonStudentData=@“{”“Name”“:”“ABC”“Subjects”“:[{”“Name”“:”“English”“},{”“Name”“:”“math”“},{”“Name”“:”“Hindi”“},{”“Name”“:”“socialstudies”“}];
JavaScriptSerializer serializer=新的JavaScriptSerializer();
学生新闻学生=序列化程序。反序列化(jsonStudentData);

公共字符串名称{get;set;}=“ABCD”无效。
c35;
code.相关或重复:。如果有帮助,请接受答案。这将在将来帮助他人
JsonConvert.DeserializeObject<Student>(jsonStudentData);
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" },
    }
};
    string jsonStudentData = @"{""Name"":""ABC"",""Subjects"":[{""Name"":""English""},{""Name"":""Maths""},{""Name"":""Hindi""},{""Name"":""Social Studies""}]}";
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    Student  newStudent = serializer.Deserialize<Student>(jsonStudentData);