我必须将json字符串反序列化为我自己的对象,该对象具有子列表,并且还有一个子列表。 像这样: 父类 - >列表 - >列表
如何对这个json字符串进行反序列化?
json示例:
{
{
"Departementstructure": {
"org.MainDepartments": [{
"@MainDepartmentsId": "4",
"@MainDepartmentsName": "Direktorium",
"@MainDepartmentsName_En": "Board of Directors",
"org.WorkAreas": [{
"@Id": "30",
"@Name": "Direktorin",
"@WorkAreasName_En": "Director",
"org.LIfBiDepartments": {
"@LIfBiDepartmentsId": "1",
"@LIfBiDepartmentsName": "Direktorin",
"@LIfBiDepartmentsName_En": "Director"
}
},
{
"@Id": "31",
"@Name": "Kaufmännischer Geschäftsführer",
"@WorkAreasName_En": "Executive Director of Administration",
"org.LIfBiDepartments": {
"@LIfBiDepartmentsId": "52",
"@LIfBiDepartmentsName": "",
"@LIfBiDepartmentsName_En": ""
}
},
{
"@Id": "32",
"@Name": "Wissenschaftliches Referat des Direktoriums",
"@WorkAreasName_En": "Scientific Office to the Board of Directors",
"org.LIfBiDepartments": {
"@LIfBiDepartmentsId": "53",
"@LIfBiDepartmentsName": "",
"@LIfBiDepartmentsName_En": ""
}
},..
jsonproperty属性来自于尝试解决方案。
public class LomVereinsstructure
{
public LomVereinsstructure()
{
Parents = new List<LomParentMainDepartment>();
}
[JsonProperty("Departementstructure")]
public List<LomParentMainDepartment> Parents { get; set; }
}
[JsonArray("org.MainDepartments")]
public class LomParentMainDepartment
{
public LomParentMainDepartment()
{
Children = new List<LomChildWorkarea>();
}
[DataMember]
[JsonProperty("@MainDepartmentsId")]
public int Id { get; set; }
[DataMember]
public string ShortName { get; set; }
[DataMember]
[JsonProperty("@MainDepartmentsName")]
public string Name { get; set; }
[DataMember]
[JsonProperty("@MainDepartmentsName_En")]
public string NameEn { get; set; }
[DataMember]
//[JsonProperty("org.WorkAreas")]
public List<LomChildWorkarea> Children { get; set; }
}
[JsonArray("org.WorkAreas")]
public class LomChildWorkarea
{
public LomChildWorkarea()
{
Children = new List<LomChildDepartment>();
}
[DataMember]
[JsonProperty("@Id")]
public int Id { get; set; }
[DataMember]
public string ShortName { get; set; }
[DataMember]
[JsonProperty("@Name")]
public string Name { get; set; }
[DataMember]
[JsonProperty("@WorkAreasName_En")]
public string NameEn { get; set; }
[DataMember]
//[JsonProperty("@org.LIfBiDepartments")]
public List<LomChildDepartment> Children { get; set; }
}
[JsonArray("org.LIfBiDepartments")]
public class LomChildDepartment
{
public LomChildDepartment()
{
OrganisationUnit = new LomChildOrganisationUnit();
}
[DataMember]
[JsonProperty("@LIfBiDepartmentsId")]
public int Id { get; set; }
[DataMember]
public string ShortName { get; set; }
[DataMember]
[JsonProperty("@LIfBiDepartmentsName")]
public string Name { get; set; }
[DataMember]
[JsonProperty("@LIfBiDepartmentsName_En")]
public string NameEn { get; set; }
[DataMember]
public LomChildOrganisationUnit OrganisationUnit { get; set; }
}
非常感谢您的帮助
答案 0 :(得分:0)
要轻松生成可容纳JSON数据的类,您可以使用其中一个JSON-C#转换服务,如https://jsonutils.com/或http://json2csharp.com/。如果这些不能生成类,你应该使用像https://jsonlint.com/之类的验证器来查看JSON是否确实有效(从片段看,第一个大括号应该是正方形,如果它实际上是数组)。
答案 1 :(得分:0)
这里存在差异:
在你的json字符串中,你有一个org.LIfBiDepartments
的对象而不是一个数组
在您的班级模型中,您有一个public List<LomChildDepartment> Children { get; set; }
所以只需修复你的json字符串来表示一个数组或修复你的模型只需要一个对象。
在任何情况下,使用Visual Studio中的Parser来帮助您查看它为json字符串重现的类模型。它非常方便。
答案 2 :(得分:0)
public class Departement
{
[JsonProperty("org.MainDepartments")]
public IList<Departaments> MainDepartments { get; set; }
}
public class Departaments
{
[JsonProperty("@MainDepartmentsId")]
public string DpId { get; set; }
[JsonProperty("@MainDepartmentsName")]
public string DpName { get; set; }
[JsonProperty("@MainDepartmentsName_En")]
public string DpNameEn { get; set; }
[JsonProperty("org.WorkAreas")]
public IList<WorkAreas> WorkAreas { get; set; }
}
public class WorkAreas
{
[JsonProperty("@Id")]
public string WorkId { get; set; }
[JsonProperty("@Name")]
public string WorkName { get; set; }
[JsonProperty("@WorkAreasName_En")]
public string WorkNameEn { get; set; }
[JsonProperty("org.LIfBiDepartments")]
public LIfBiDepartments LIfBiDepartments { get; set; }
}
public class LIfBiDepartments
{
[JsonProperty("@LIfBiDepartmentsId")]
public string BiDpId { get; set; }
[JsonProperty("@LIfBiDepartmentsName")]
public string BiDpName { get; set; }
[JsonProperty("@LIfBiDepartmentsName_En")]
public string BiDpNameEn { get; set; }
}
Use a property in the parent class to call the object's deserializer in
daughters classes.
Example:
[JsonProperty("Departementstructure")]
public Departement MainDepartement { get; set; }
Output:
答案 3 :(得分:0)
Visual Studio在Edit中有一个解析器 - &gt;选择性粘贴 - &gt;过去JSON作为类然后你可以比较它与你自己的对象,并看到什么是错的 - Zorkind
我使用visual studio中的集成解析器解决了这个问题。
由于