C# 使用JsonConvert反序列化三级Json
这是我的json:C# 使用JsonConvert反序列化三级Json,c#,json.net,C#,Json.net,这是我的json: { "Absoluteentry": 6, "Name": "ricpez", "OwnerCode": 16, "OwnerName": null, "PickDate": "2018-03-27", "Remarks": "", "Status": "ps_Released", "ObjectType": "156", "UseBaseUnits": "tNO", "PickListsLine
{
"Absoluteentry": 6,
"Name": "ricpez",
"OwnerCode": 16,
"OwnerName": null,
"PickDate": "2018-03-27",
"Remarks": "",
"Status": "ps_Released",
"ObjectType": "156",
"UseBaseUnits": "tNO",
"PickListsLines": [
{
"AbsoluteEntry": 6,
"LineNumber": 0,
"OrderEntry": 417,
"OrderRowID": 0,
"PickedQuantity": 0,
"PickStatus": "ps_Released",
"ReleasedQuantity": 5,
"PreviouslyReleasedQuantity": 5,
"BaseObjectType": 17,
"SerialNumbers": [],
"BatchNumbers": [],
"DocumentLinesBinAllocations": [
{
"BinAbsEntry": 1,
"Quantity": 5,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 0
}
]
},
{
"AbsoluteEntry": 6,
"LineNumber": 1,
"OrderEntry": 417,
"OrderRowID": 1,
"PickedQuantity": 0,
"PickStatus": "ps_Released",
"ReleasedQuantity": 6,
"PreviouslyReleasedQuantity": 6,
"BaseObjectType": 17,
"SerialNumbers": [],
"BatchNumbers": [],
"DocumentLinesBinAllocations": [
{
"BinAbsEntry": 1,
"Quantity": 6,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 1
}
]
},
{
"AbsoluteEntry": 6,
"LineNumber": 2,
"OrderEntry": 417,
"OrderRowID": 3,
"PickedQuantity": 0,
"PickStatus": "ps_Released",
"ReleasedQuantity": 2,
"PreviouslyReleasedQuantity": 2,
"BaseObjectType": 17,
"SerialNumbers": [],
"BatchNumbers": [],
"DocumentLinesBinAllocations": [
{
"BinAbsEntry": 1,
"Quantity": 2,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 2
}
]
},
{
"AbsoluteEntry": 6,
"LineNumber": 3,
"OrderEntry": 417,
"OrderRowID": 4,
"PickedQuantity": 0,
"PickStatus": "ps_Released",
"ReleasedQuantity": 20,
"PreviouslyReleasedQuantity": 20,
"BaseObjectType": 17,
"SerialNumbers": [],
"BatchNumbers": [],
"DocumentLinesBinAllocations": [
{
"BinAbsEntry": 1,
"Quantity": 20,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 3
}
]
},
{
"AbsoluteEntry": 6,
"LineNumber": 4,
"OrderEntry": 417,
"OrderRowID": 5,
"PickedQuantity": 0,
"PickStatus": "ps_Released",
"ReleasedQuantity": 1,
"PreviouslyReleasedQuantity": 1,
"BaseObjectType": 17,
"SerialNumbers": [],
"BatchNumbers": [],
"DocumentLinesBinAllocations": [
{
"BinAbsEntry": 1,
"Quantity": 1,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 4
}
]
}
]
}
这是我的班级:
一级
public class ListaPrelievoTestata
{
public ListaPrelievoTestata()
{
this.PickLines = new List<ListaPrelievoDettaglio>();
}
public int Absoluteentry { get; set; }
public string Name { get; set; }
public DateTime PickDate { get; set; }
public string Status { get; set; }
public string Remarks { get; set; }
public string ObjectType { get; set; }
public string UseBaseUnits { get; set; }
protected List<ListaPrelievoDettaglio> _rows;
public virtual List<ListaPrelievoDettaglio> PickLines
{
get
{
if (_rows == null)
{
_rows = new List<ListaPrelievoDettaglio>();
}
return _rows;
}
set
{
_rows = value;
}
}
}
要分析它,我尝试了以下方法,但它不分析第三级:
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
public static ListaPrelievoTestata DeserializeLista(string json)
{
ListaPrelievoTestata it = JsonConvert.DeserializeObject<ListaPrelievoTestata>(json);
JObject details = JObject.Parse(json);
IList<JToken> res2 = details.SelectToken("PickListsLines").Children().ToList();
IList<ListaPrelievoDettaglio> detailss = new List<ListaPrelievoDettaglio>();
foreach (JToken results in res2)
{
rowss = results.ToObject<ListaPrelievoDettaglio>();
detailss.Add(rowss);
it.PickLines = detailss.ToList();
}
JObject ubicazioni = JObject.Parse(json);
IList<JToken> res3 = ubicazioni.SelectToken("PickListsLines").Last().Children().ToList();
IList<ListaPrelievoDettaglioUbicazioni> listaUbicazioni = new List<ListaPrelievoDettaglioUbicazioni>();
foreach (JToken results in res3)
{
rowsss = results.ToObject<ListaPrelievoDettaglioUbicazioni>();
listaUbicazioni.Add(rowsss);
}
List<ListaPrelievoDettaglioUbicazioni> ubic = new List<ListaPrelievoDettaglioUbicazioni>();
for (int i = 0; i < it.PickLines.Count(); i++)
{
ubic.Add(listaUbicazioni.ToList().ElementAt(i));
it.PickLines[i].UbicazioniLines = ubic;
ubic.Clear();
}
return it;
}
"BinAbsEntry": 1,
"Quantity": 1,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 4
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
// public string AllowNegativeQuantity { get; set; }
// public int SerialAndBatchNumbersBaseLine { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
publicstaticlistaplievotestata反序列化列表(字符串json)
{
ListaPrelievoTestata it=JsonConvert.DeserializeObject(json);
JObject details=JObject.Parse(json);
IList res2=details.SelectToken(“PickListsLines”).Children().ToList();
IList detailss=新列表();
foreach(JToken导致res2)
{
rowss=results.ToObject();
详细信息。添加(行);
it.PickLines=detailss.ToList();
}
JObject ubicazioni=JObject.Parse(json);
IList res3=ubicazioni.SelectToken(“PickListsLines”).Last().Children().ToList();
IList listaUbicazioni=新列表();
foreach(JToken导致res3)
{
rowsss=results.ToObject();
listaUbicazioni.Add(rowsss);
}
List ubic=新列表();
对于(int i=0;i
我还尝试使用方法last()获取列表的最后一个子元素,但我总是选择第一个元素以及方法first()。JSon第三级:
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
public static ListaPrelievoTestata DeserializeLista(string json)
{
ListaPrelievoTestata it = JsonConvert.DeserializeObject<ListaPrelievoTestata>(json);
JObject details = JObject.Parse(json);
IList<JToken> res2 = details.SelectToken("PickListsLines").Children().ToList();
IList<ListaPrelievoDettaglio> detailss = new List<ListaPrelievoDettaglio>();
foreach (JToken results in res2)
{
rowss = results.ToObject<ListaPrelievoDettaglio>();
detailss.Add(rowss);
it.PickLines = detailss.ToList();
}
JObject ubicazioni = JObject.Parse(json);
IList<JToken> res3 = ubicazioni.SelectToken("PickListsLines").Last().Children().ToList();
IList<ListaPrelievoDettaglioUbicazioni> listaUbicazioni = new List<ListaPrelievoDettaglioUbicazioni>();
foreach (JToken results in res3)
{
rowsss = results.ToObject<ListaPrelievoDettaglioUbicazioni>();
listaUbicazioni.Add(rowsss);
}
List<ListaPrelievoDettaglioUbicazioni> ubic = new List<ListaPrelievoDettaglioUbicazioni>();
for (int i = 0; i < it.PickLines.Count(); i++)
{
ubic.Add(listaUbicazioni.ToList().ElementAt(i));
it.PickLines[i].UbicazioniLines = ubic;
ubic.Clear();
}
return it;
}
"BinAbsEntry": 1,
"Quantity": 1,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 4
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
// public string AllowNegativeQuantity { get; set; }
// public int SerialAndBatchNumbersBaseLine { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
第三级:
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
public static ListaPrelievoTestata DeserializeLista(string json)
{
ListaPrelievoTestata it = JsonConvert.DeserializeObject<ListaPrelievoTestata>(json);
JObject details = JObject.Parse(json);
IList<JToken> res2 = details.SelectToken("PickListsLines").Children().ToList();
IList<ListaPrelievoDettaglio> detailss = new List<ListaPrelievoDettaglio>();
foreach (JToken results in res2)
{
rowss = results.ToObject<ListaPrelievoDettaglio>();
detailss.Add(rowss);
it.PickLines = detailss.ToList();
}
JObject ubicazioni = JObject.Parse(json);
IList<JToken> res3 = ubicazioni.SelectToken("PickListsLines").Last().Children().ToList();
IList<ListaPrelievoDettaglioUbicazioni> listaUbicazioni = new List<ListaPrelievoDettaglioUbicazioni>();
foreach (JToken results in res3)
{
rowsss = results.ToObject<ListaPrelievoDettaglioUbicazioni>();
listaUbicazioni.Add(rowsss);
}
List<ListaPrelievoDettaglioUbicazioni> ubic = new List<ListaPrelievoDettaglioUbicazioni>();
for (int i = 0; i < it.PickLines.Count(); i++)
{
ubic.Add(listaUbicazioni.ToList().ElementAt(i));
it.PickLines[i].UbicazioniLines = ubic;
ubic.Clear();
}
return it;
}
"BinAbsEntry": 1,
"Quantity": 1,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 4
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
// public string AllowNegativeQuantity { get; set; }
// public int SerialAndBatchNumbersBaseLine { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
我不明白为什么你认为JSon可以被解析为属性不匹配
也许可以尝试在注释中添加属性?JSon第三级:
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
public static ListaPrelievoTestata DeserializeLista(string json)
{
ListaPrelievoTestata it = JsonConvert.DeserializeObject<ListaPrelievoTestata>(json);
JObject details = JObject.Parse(json);
IList<JToken> res2 = details.SelectToken("PickListsLines").Children().ToList();
IList<ListaPrelievoDettaglio> detailss = new List<ListaPrelievoDettaglio>();
foreach (JToken results in res2)
{
rowss = results.ToObject<ListaPrelievoDettaglio>();
detailss.Add(rowss);
it.PickLines = detailss.ToList();
}
JObject ubicazioni = JObject.Parse(json);
IList<JToken> res3 = ubicazioni.SelectToken("PickListsLines").Last().Children().ToList();
IList<ListaPrelievoDettaglioUbicazioni> listaUbicazioni = new List<ListaPrelievoDettaglioUbicazioni>();
foreach (JToken results in res3)
{
rowsss = results.ToObject<ListaPrelievoDettaglioUbicazioni>();
listaUbicazioni.Add(rowsss);
}
List<ListaPrelievoDettaglioUbicazioni> ubic = new List<ListaPrelievoDettaglioUbicazioni>();
for (int i = 0; i < it.PickLines.Count(); i++)
{
ubic.Add(listaUbicazioni.ToList().ElementAt(i));
it.PickLines[i].UbicazioniLines = ubic;
ubic.Clear();
}
return it;
}
"BinAbsEntry": 1,
"Quantity": 1,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 4
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
// public string AllowNegativeQuantity { get; set; }
// public int SerialAndBatchNumbersBaseLine { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
第三级:
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
public static ListaPrelievoTestata DeserializeLista(string json)
{
ListaPrelievoTestata it = JsonConvert.DeserializeObject<ListaPrelievoTestata>(json);
JObject details = JObject.Parse(json);
IList<JToken> res2 = details.SelectToken("PickListsLines").Children().ToList();
IList<ListaPrelievoDettaglio> detailss = new List<ListaPrelievoDettaglio>();
foreach (JToken results in res2)
{
rowss = results.ToObject<ListaPrelievoDettaglio>();
detailss.Add(rowss);
it.PickLines = detailss.ToList();
}
JObject ubicazioni = JObject.Parse(json);
IList<JToken> res3 = ubicazioni.SelectToken("PickListsLines").Last().Children().ToList();
IList<ListaPrelievoDettaglioUbicazioni> listaUbicazioni = new List<ListaPrelievoDettaglioUbicazioni>();
foreach (JToken results in res3)
{
rowsss = results.ToObject<ListaPrelievoDettaglioUbicazioni>();
listaUbicazioni.Add(rowsss);
}
List<ListaPrelievoDettaglioUbicazioni> ubic = new List<ListaPrelievoDettaglioUbicazioni>();
for (int i = 0; i < it.PickLines.Count(); i++)
{
ubic.Add(listaUbicazioni.ToList().ElementAt(i));
it.PickLines[i].UbicazioniLines = ubic;
ubic.Clear();
}
return it;
}
"BinAbsEntry": 1,
"Quantity": 1,
"AllowNegativeQuantity": "tNO",
"SerialAndBatchNumbersBaseLine": -1,
"BaseLineNumber": 4
public class ListaPrelievoDettaglioUbicazioni
{
public int BinAbsEntry { get; set; }
public int Quantity { get; set; }
// public string AllowNegativeQuantity { get; set; }
// public int SerialAndBatchNumbersBaseLine { get; set; }
public int BaseLineNumber { get; set; }
public virtual ListaPrelievoDettaglio Lista { get; set; }
}
我不明白为什么你认为JSon可以被解析为属性不匹配
也许可以尝试在注释中添加属性