繁体   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