簡體   English   中英

JSON.Net,JsonConvert.DeserializeObject - 反序列化的問題

[英]JSON.Net, JsonConvert.DeserializeObject - problems with deserialization

當我嘗試使用JSON.Net反序列化我的JSON時,它為我提供了JSON數組的無效值。

我有簡單的JSON:

[
{
    "PhaseName": "Start",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
},
{
    "PhaseName": "In Progress",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
},
{
    "PhaseName": "Finish",
    "Advices": ["Lorem ipsum dolor",
    "Lorem ipsum dolor",
    "Lorem ipsum dolor"]
}

]

我的代碼中有一個通訊員:

public class Advices
{
    public string PhaseName { get; set; }
    public List<string> AdvicesList { get; set; }
}

並且是一個表示Advices對象數組的可靠代碼:

public class MyAdvices
{
    private Advices[] MyAdvicesArrays;
....

所以,當我試圖反序列化我的JSON時:

MyAdvicesArrays= JsonConvert.DeserializeObject<Advices[]>(sMyJSON));

JSON.Net使用正確的值填充MyAdvicesArrays數組中每個對象的“Phase Name”屬性,但每個對象的Advices數組無效:如果在運行時檢查它們,則“無法計算表達式”。 我不明白。 我做錯了什么?

根據實體,您的json無效。

在您的類型更改AdvicesListAdvices

public List<string> AdvicesList { get; set; }

將其更改為

public List<string> Advices { get; set; }

不,你是JSON是不正確的,因為你是Class。

首先將您的JSON更改為:

{
    phases:[
        {
            "PhaseName": "Start",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        },
        {
            "PhaseName": "In Progress",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        },
        {
            "PhaseName": "Finish",
            "Advices": ["Lorem ipsum dolor",
            "Lorem ipsum dolor",
            "Lorem ipsum dolor"]
        }
    ]
}

在沒有正確聲明JSON對象之前請注意。 您還需要一個數組屬性。

現在你需要兩個課程:

public class AnythinYouWant{
    public List<Phase> Phases{get;set;}
}

public class Phase{
    public string PhaseName{get;set;}
    public List<string> Advices{get;set;}
}

注意第一個類是如何用於頂級JSON對象的。 這個名字可以是你想要的任何名字。 但任何財產都需要與名稱相匹配。

我所做的就是改變Advices類的定義:

public class Advice
{
    public string PhaseName { get; set; }
    public List<string> Advices { get; set; }
}

我改變了類的名稱,只是AdviceAdvicesList財產Advices

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM