我有这个JSON字符串:
[{"fkp_keyword":"CLI_RID"},
{"fkp_keyword":"DOC_NAME"},
{"fkp_keyword":"FILENAME"},
{"fkp_keyword":"PRINT_DATE"},
{"fkp_keyword":"EVENT_CODE"},
{"fkp_keyword":"CONFL_RID"},
{"fkp_keyword":"PROGRAM_CODE"},
{"fkp_keyword":"CES"},
{"fkp_keyword":"DISTR"},
{"fkp_keyword":"REC_DATE"},
{"fkp_keyword":"REC_RID"},
{"fkp_keyword":"PFL_RID"},
{"fkp_keyword":"DES"},
{"fkp_keyword":"CER_RID"}
]
我需要将它转换为下面的类kw的列表。
说明:
public class kw
{
public string fkp_keyword { get; set; }
}
但是这段代码:
List<kw> header = new List<kw>();
using (WebClient client = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string result = client.DownloadString(parms);
header = JsonConvert.DeserializeObject<List<kw>>(result);
}
该调用返回上面的JSON字符串,但在尝试转换它时,上面的代码返回此异常:
Error converting value to type 'System.Collections.Generic.List[LA.Models.kw]
更新
我将定义更改为:
public class kwList
{
public kw[] Property1 { get; set; }
}
public class kw
{
public string fkp_keyword { get; set; }
}
以及此代码:
kwList header = new kwList();
using (WebClient client = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string result = client.DownloadString(parms);
header = JsonConvert.DeserializeObject<kwList>(result);
}
但现在我得到了这个例外:
Could not cast or convert from System.String to LicenseeArchive.Models.kwList.
我做错了什么?
答案 0 :(得分:1)
无论出于何种原因,该URL返回的JSON字符串似乎是双序列化的。也就是说,它包含额外的反斜杠以转义所有引号,从而阻止它被正确地反序列化为对象数组。这就是你收到错误的原因。
要解决此问题,您可以将其反序列化两次:首先取消JSON,第二次对您的类进行“真正的”反序列化。从长远来看,您可能还希望与API的提供商联系,看看他们是否会修复他们的JSON。
List<kw> header = new List<kw>();
using (WebClient client = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string result = client.DownloadString(parms);
string unescapedJson = JsonConvert.DeserializeObject<string>(result);
header = JsonConvert.DeserializeObject<List<kw>>(unescapedJson);
}
答案 1 :(得分:0)
您提供的JSON字符串可以加载您的第一个类定义:
public class kw
{
public string fkp_keyword { get; set; }
}
示例:
string example = "[{\"fkp_keyword\":\"CLI_RID\"}, {\"fkp_keyword\":\"DOC_NAME\"}, {\"fkp_keyword\":\"FILENAME\"}]";
List<kw> kws = JsonConvert.DeserializeObject<List<kw>>(example);
也许您没有提供所有细节。或者你的json字符串看起来不一样。