【发布时间】:2020-09-24 12:12:51
【问题描述】:
我有如下所示的原始 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)。
对此的任何帮助将不胜感激。
【问题讨论】:
-
不过,这不是正确的期望。
"Codes": "anything here"是一个字符串,而不是字符串的集合。因此,NewtonSoft 按预期工作。您的输入相当欠佳。 -
Codes的每个值都用引号引起来,使其成为字符串,而不是数组。"Codes": "[\"DB\",\"IE\"]"应该是"Codes": [\"DB\",\"IE\"]。 -
哦,在这种情况下,您有一个 JSON 字符串 in db。您需要修复服务器端,而不是客户端...因为:如果您将其从 db as a string 中提取出来,请将模型字段设置为该字符串(即
model.Codes = stringFromDB;),然后序列化为json,你会得到你在这里看到的。 -
@LeszekP 这真的无济于事。双方都可以解决问题,但不能通过自动代码生成来解决。
-
确实我的评论太短了。它不会修复它,它只是下次如何调试它的提示。如果我要获取字符串列表,但生成的代码只是一个字符串,那么某些内容不正确,需要在 Json/XML 等中进行调查。这只是评论/提示而不是答案,因为已经有来自@matmahnke 的回答。干杯