簡體   English   中英

反序列化字符串數組以列出 C#

[英]Deserialize string array to list C#

我有如下所示的原始 JSON 數據:

{
    "Pages": 0,
    "Page": null,
    "Rows": null,
    "OrderBy": null,
    "Desc": false,
    "TotalRows": 36,
    "HasError": false,
    "Error": null,
    "Result": {
        "fileTypes": [
            {
                "id": 22,
                "description": "Cleaning Procedures",
                "Codes": ""
            },
            {
                "id": 32,
                "description": "Data Drop",
                "Codes": "[\"DB\",\"IE\"]"
            },
            {
                "id": 4,
                "description": "Data Sheet",
                "Codes": ""
            },
            {
                "id": 30,
                "description": "Description of Operation",
                "Codes": ""
            },
            {
                "id": 11,
                "description": "Diagram",
                "Codes": ""
            },
            {
                "id": 2,
                "description": "Drawing",
                "Codes": "[\"DR\"]"
            }
        ]
    }
}

和一個看起來像這樣的 C# Model

public class Filetype
{
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("description")]
    public string Description { get; set; }
    [JsonProperty("Codes")]
    //public string Codes { get; set; }

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

但是,Newtonsoft 不會將代碼反序列化為代碼列表,而是返回

[\\"DB\\",\\"IE\\"]在列表的第一個元素中,或 , "" , ( null )。

對此的任何幫助將不勝感激。

代碼具有以下值 "["DB","IE"]" 但json 中的列表不需要引號

json中代碼的值需要是這樣的

 "Codes": ["DB","IE"]

客戶端 :

如果屬性之一是 Json 的字符串序列化。
您可以使用[JsonIgnore]添加一個表示反序列化結果的屬性:

public class Foo{
    public string BarsInString {get;set;}       
    [JsonIgnore]
    public Bar[] Bars 
    {
        get 
         {
            return JsonConvert.DeserializeObject<Bar[]>(UserInput);
         }
       set 
        {
           BarsInString = JsonConvert.SerializeObject(value);
        }     
    }
}

現場演示: https : //dotnetfiddle.net/l5JWVb

我選擇了比List<string>更大的東西來說明。 在您的情況下,它將歸結為:

public class Filetype
{
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("description")]
    public string Description { get; set; }
    [JsonProperty("Codes")]
    public string CodesInJson { get; set; }

    [JsonIgnore]
    public List<string> Codes {
        get 
         {
            return JsonConvert.DeserializeObject<List<string>>(CodesInJson);
         }
       set 
        {
           CodesInJson = JsonConvert.SerializeObject(value);
        }     
    }
}

服務器端:

如果屬性之一是其他內容的 Json 序列化,您可能希望在發送之前反序列化它。 使用相同類型的代碼:

JsonConvert.DeserializeObject<List<string>>(myJsonFromDb);

暫無
暫無

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

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