7

In meinem Code ich Json habe ein Cookie Objekt serialisiert und gibt es als String, Deserialize zu diesem Zweck ich so tun:eine Json serialisiert Cookie

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

an folgenden json resultierenden

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

deserialisieren dieses json ich so etwas wie dies tun wollte:

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

aber es funktioniert nicht und heben JsonSerializationException

System.Net.CookieCollection Kann nicht erstellen und füllen Listentyp zu sagen. Pfad ‚‘, Zeile 1, Position 1.

Also änderte ich meinen Code auf die folgende und seine Arbeit jetzt

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

ich gerade fragen, warum mein erster Versuch fehlschlägt? und wenn es einen schöneren Weg gibt, es zu tun.

+0

Wie http://stackoverflow.com/questions/27449717/newtonsoft-json-cannot-create-and-populate-list-type sagt ... Versuchen Sie, List anstelle von CookieCollection zu verwenden. Sie können es in Liste nach Liste konvertieren cookieList = cookieCollection.OfType () .ToList(); –

+0

@PaulZahra Ich habe es bereits als Liste ! Meine Frage ist, warum dieses 'Newtonsoft.Json.JsonConvert.DeserializeObject (json);' fehlschlägt! – HadiRj

+0

Wie ist CookieCollection Cookies = neu CookieCollection(); das gleiche wie Liste ? –

Antwort

3

JSON.NET unterstützt die Deserialisierung nicht generischer IEnumerable s.

CookieCollection implementiert IEnumerable und ICollection, aber nicht . Wenn JSON.NET die Sammlung deserialisiert, weiß es nicht, wie die einzelnen Elemente in IEnumerable in demerialisiert werden sollen.

Vergleichen Sie dies mit IList<Cookie>, die einen generischen Typparameter hat. JSON.NET kann bestimmen, welchen Typ jedes Element in der resultierenden Liste haben soll.

Sie können dies mit der in den Kommentaren beschriebenen Problemumgehung beheben oder einen benutzerdefinierten Konverter schreiben.

Verwandte Themen