7

Nel mio codice devo JSON serializzare un oggetto CookieCollection e passarlo come stringa, per raggiungere questo mi piace questo:deserializzare un JSON CookieCollection serializzato

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

risultante al seguente 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 
} 
] 

deserializzare questo jSON ho voluto fare qualcosa di simile:

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

ma fallisce e sollevare JsonSerializationException dicendo

Impossibile creare e popolare nell'elenco Tipo System.Net.CookieCollection. Percorso '', riga 1, posizione 1.

Così ho cambiato il mio codice di seguito e la sua ora di lavoro

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

Mi chiedo solo perché il mio primo tentativo fallisce? e se c'è un modo migliore per farlo.

+0

Come http://stackoverflow.com/questions/27449717/newtonsoft-json-cannot-create-and-populate-list-type dice ... Prova ad utilizzare la Lista invece di CookieCollection. Puoi convertirlo in lista per Lista cookieList = cookieCollection.OfType () .ToList(); –

+0

@PaulZahra L'ho già in lista ! la mia domanda è perché questo 'Newtonsoft.Json.JsonConvert.DeserializeObject (json);' fallisce! – HadiRj

+0

Come sono cookie CookieCollection = new CookieCollection(); lo stesso di Lista ? –

risposta

3

JSON.NET non supporta la deserializzazione non generica IEnumerable s.

CookieCollection strumenti IEnumerable e ICollection, ma non IEnumerable<Cookie>. Quando JSON.NET va a deserializzare la raccolta, non sa cosa deserializzare i singoli elementi nello IEnumerable in.

Contrasto con IList<Cookie> che ha un parametro di tipo generico. JSON.NET può determinare il tipo di ciascun elemento nell'elenco risultante.

È possibile risolvere questo problema utilizzando la soluzione illustrata nei commenti o scrivere un convertitore personalizzato.