【发布时间】:2012-05-14 14:38:31
【问题描述】:
我正在使用 Newtonsoft.Json 版本 4.0.8 并尝试将它与 Web API 一起使用。 所以我想用
反序列化JSONJsonConvert.DeserializeObject<AClass>(jsonString);
这一直有效,直到我将 Dictionary 作为属性添加到此类并想要反序列化它。
json字符串格式为
{
"Date":null,
"AString":"message",
"Attributes":[
{"Key":"key1","Value":"value1"},
{"Key":"key2","Value":"value2"}
],
"Id":0,
"Description":"...
}
当反序列化 JsonSerializationException 类型的异常时出现消息:“无法将 JSON 数组反序列化为类型 'System.Collections.Generic.Dictionary`2[System.String,System.String]'。”
我在这里做错了什么?
更新1: 当使用 JSON.NET 进行序列化时,我得到以下字典:
Attributes":{"key1":"value1","key2":"value2"}
似乎 WebApi 以不同于 Json.Net 的方式反序列化对象。 服务器端我使用以下行进行隐式反序列化:
return new HttpResponseMessage<AClass>(object);
更新 2: 作为一种解决方法,我现在来到以下线路服务器端。
return new HttpResponseMessage<string>(JsonConvert.SerializeObject(license).Base64Encode());
我用 Json.Net 服务器端将其转换为 base64 编码字符串。所以Json.Net可以反序列化自己的格式。
但它仍然不是我想要的,所以他们有什么进一步的建议吗?
【问题讨论】:
-
序列化类会得到什么JSON?
-
感谢您的快速回复。我相应地更新了我的问题。
-
除非 Web API 或 Newtonsoft 上有一个选项可以让它以“相反”的方式处理字典,否则我建议在每一端使用相同的库(序列化/反序列化),如果在一切皆有可能。
标签: c# .net json json.net asp.net-web-api