7

Trong mã của tôi, tôi phải Json serialize một đối tượng CookieCollection và vượt qua nó như chuỗi, để đạt được điều này tôi làm như thế này:Deserialize một json serialized CookieCollection

var json = Newtonsoft.Json.JsonConvert.SerializeObject(resp.Cookies); 

dẫn đến json sau

[ 
{ 
    "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 
} 
] 

để deserialize json này tôi muốn làm một cái gì đó như thế này:

var cookies = Newtonsoft.Json.JsonConvert.DeserializeObject<CookieCollection>(json); 

Nhưng nó không thành công và nâng cao JsonSerializationException nói

Không thể tạo và cư danh sách loại System.Net.CookieCollection. Con đường '', dòng 1, vị trí 1.

Vì vậy, tôi đã thay đổi mã của tôi như sau và làm việc của nó bây giờ

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

Tôi chỉ tự hỏi tại sao nỗ lực đầu tiên của tôi không? và nếu có cách nào tốt hơn để làm điều đó.

+0

Khi http://stackoverflow.com/questions/27449717/newtonsoft-json-cannot-create-and-populate-list-type nói ... Hãy thử sử dụng Danh sách thay vì CookieCollection. Bạn có thể chuyển đổi nó thành danh sách theo Danh sách cookieList = cookieCollection.OfType () .ToList(); –

+0

@PaulZahra Tôi đã có nó như Danh sách ! câu hỏi của tôi là tại sao 'Newtonsoft.Json.JsonConvert.DeserializeObject (json); 'không thành công! – HadiRj

+0

Cookie CookieCollection = new CookieCollection(); giống như Danh sách ? –

Trả lời

3

JSON.NET không hỗ trợ deserializing không chung chung IEnumerable s.

CookieCollection triển khai IEnumerableICollection, nhưng không phải IEnumerable<Cookie>. Khi JSON.NET đi để deserialize bộ sưu tập, nó không biết những gì để deserialize các mục riêng lẻ trong IEnumerable vào.

Tương phản điều này với IList<Cookie> có thông số loại chung. JSON.NET có thể xác định loại phần tử nào trong danh sách kết quả.

Bạn có thể khắc phục điều này bằng cách giải quyết sự cố trong các nhận xét hoặc viết trình chuyển đổi tùy chỉnh.

Các vấn đề liên quan