C# 反序列化json序列化的CookieCollection

C# 反序列化json序列化的CookieCollection,c#,serialization,json.net,json-deserialization,httpcookiecollection,C#,Serialization,Json.net,Json Deserialization,Httpcookiecollection,在我的代码中,我必须对CookieCollection对象进行Json序列化,并将其作为字符串传递,要实现这一点,我的做法如下: var json = Newtonsoft.Json.JsonConvert.SerializeObject(resp.Cookies); var cookies = Newtonsoft.Json.JsonConvert.DeserializeObject<CookieCollection>(json); 生成以下json [ { "Comme

在我的代码中,我必须对CookieCollection对象进行Json序列化,并将其作为字符串传递,要实现这一点,我的做法如下:

var json = Newtonsoft.Json.JsonConvert.SerializeObject(resp.Cookies);
var cookies = Newtonsoft.Json.JsonConvert.DeserializeObject<CookieCollection>(json);
生成以下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 json = Newtonsoft.Json.JsonConvert.SerializeObject(resp.Cookies);
var cookies = Newtonsoft.Json.JsonConvert.DeserializeObject<CookieCollection>(json);
var cookies=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
但它失败并引发JsonSerializationException

无法创建和填充列表类型System.Net.CookieCollection。路径“”,第1行,位置1

所以我把我的代码改成了下面的代码,它现在可以工作了

var tmpcookies = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Cookie>>(json);
CookieCollection cookies = new CookieCollection();
tmpcookies.ForEach(cookies.Add);
var tmpcookies=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
CookieCollection cookies=新CookieCollection();
tmpcookies.ForEach(cookies.Add);

我只是想知道为什么我的第一次尝试失败了?如果有更好的方法的话。

JSON.NET不支持反序列化非泛型
IEnumerable
s

CookieCollection
实现
IEnumerable
ICollection
,但不实现
IEnumerable
。当JSON.NET对集合进行反序列化时,它不知道如何将
IEnumerable
中的各个项反序列化为

将此与具有泛型类型参数的IList进行对比。JSON.NET可以确定结果列表中每个元素的类型


您可以使用注释中讨论的解决方法修复此问题,或者编写自定义转换器。

如前所述。。。尝试使用列表而不是CookieCollection。您可以通过list cookieList=cookieCollection.OfType().ToList()将其转换为list@我已经把它列在名单上了!我的问题是为什么这个
Newtonsoft.Json.JsonConvert.DeserializeObject(Json)失败!CookieCollection cookies=新CookieCollection()如何;与List相同?@har07,但List实现了IEnumerable(以及IEnumerable)和ICollection,而CoockieCollection也实现了ICollection。