反序列化 json 序列化的 CookieCollection
Deserialize a json serialized CookieCollection
在我的代码中,我必须 Json 序列化一个 CookieCollection 对象并将其作为字符串传递,为此我这样做:
var json = Newtonsoft.Json.JsonConvert.SerializeObject(resp.Cookies);
结果如下json
[
{
"Comment": "",
"CommentUri": null,
"HttpOnly": false,
"Discard": false,
"Domain": "www.site.com",
"Expired": true,
"Expires": "1970-01-01T03:30:01+03:30",
"Name": "version",
"Path": "/",
"Port": "",
"Secure": false,
"TimeStamp": "2015-06-01T12:19:46.3293119+04:30",
"Value": "deleted",
"Version": 0
},
{
"Comment": "",
"CommentUri": null,
"HttpOnly": false,
"Discard": false,
"Domain": ".site.com",
"Expired": false,
"Expires": "2015-07-31T12:19:48+04:30",
"Name": "ADS_7",
"Path": "/",
"Port": "",
"Secure": false,
"TimeStamp": "2015-06-01T12:19:46.3449217+04:30",
"Value": "0",
"Version": 0
}
]
要反序列化这个 json 我想做这样的事情:
var cookies = Newtonsoft.Json.JsonConvert.DeserializeObject<CookieCollection>(json);
但它失败并引发 JsonSerializationException 说
Cannot create and populate list type System.Net.CookieCollection. Path '', line 1, position 1.
所以我将我的代码更改为以下内容并且现在可以正常工作了
var tmpcookies = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Cookie>>(json);
CookieCollection cookies = new CookieCollection();
tmpcookies.ForEach(cookies.Add);
我只是想知道为什么我的第一次尝试失败了?以及是否有更好的方法。
JSON.NET 不支持反序列化非泛型 IEnumerable
。
CookieCollection
实现了 IEnumerable
和 ICollection
,但没有实现 IEnumerable<Cookie>
。当JSON.NET去反序列化集合时,它不知道将IEnumerable
中的单个项目反序列化成什么。
将此与具有通用类型参数的 IList<Cookie>
进行对比。 JSON.NET 可以确定结果列表中的每个元素应该是什么类型。
您可以使用评论中讨论的解决方法解决此问题,或者编写自定义转换器。
在我的代码中,我必须 Json 序列化一个 CookieCollection 对象并将其作为字符串传递,为此我这样做:
var json = Newtonsoft.Json.JsonConvert.SerializeObject(resp.Cookies);
结果如下json
[
{
"Comment": "",
"CommentUri": null,
"HttpOnly": false,
"Discard": false,
"Domain": "www.site.com",
"Expired": true,
"Expires": "1970-01-01T03:30:01+03:30",
"Name": "version",
"Path": "/",
"Port": "",
"Secure": false,
"TimeStamp": "2015-06-01T12:19:46.3293119+04:30",
"Value": "deleted",
"Version": 0
},
{
"Comment": "",
"CommentUri": null,
"HttpOnly": false,
"Discard": false,
"Domain": ".site.com",
"Expired": false,
"Expires": "2015-07-31T12:19:48+04:30",
"Name": "ADS_7",
"Path": "/",
"Port": "",
"Secure": false,
"TimeStamp": "2015-06-01T12:19:46.3449217+04:30",
"Value": "0",
"Version": 0
}
]
要反序列化这个 json 我想做这样的事情:
var cookies = Newtonsoft.Json.JsonConvert.DeserializeObject<CookieCollection>(json);
但它失败并引发 JsonSerializationException 说
Cannot create and populate list type System.Net.CookieCollection. Path '', line 1, position 1.
所以我将我的代码更改为以下内容并且现在可以正常工作了
var tmpcookies = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Cookie>>(json);
CookieCollection cookies = new CookieCollection();
tmpcookies.ForEach(cookies.Add);
我只是想知道为什么我的第一次尝试失败了?以及是否有更好的方法。
JSON.NET 不支持反序列化非泛型 IEnumerable
。
CookieCollection
实现了 IEnumerable
和 ICollection
,但没有实现 IEnumerable<Cookie>
。当JSON.NET去反序列化集合时,它不知道将IEnumerable
中的单个项目反序列化成什么。
将此与具有通用类型参数的 IList<Cookie>
进行对比。 JSON.NET 可以确定结果列表中的每个元素应该是什么类型。
您可以使用评论中讨论的解决方法解决此问题,或者编写自定义转换器。