[英]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.