Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JsonConvert反序列化三级Json_C#_Json.net - Fatal编程技术网

C# 使用JsonConvert反序列化三级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

这是我的json:

{
    "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可以被解析为属性不匹配

也许可以尝试在注释中添加属性