2016-06-05 7 views
0

I String json konvertieren wollen, aber alles, was ich bekommen ist null oder FehlerConvert String Json in C#

Zum Beispiel möchte ich diese Zeichenfolge konvertieren:

string json = 
       "{\"$id\":\"1\",\"Result\":{\"$id\":\"2\",\"ListRate\":[{\"$id\":\"3\",\"Title\":\"fetures\",\"ShoppingRateId\":3,\"Rate\":0.0},{\"$id\":\"4\",\"Title\":\"Graphic\",\"ShoppingRateId\":2,\"Rate\":0.0},{\"$id\":\"5\",\"Title\":\"worth of price\",\"ShoppingRateId\":1,\"Rate\":0.0}],\"MyRate\":[{\"$id\":\"6\",\"Title\":\"worth of price\",\"ShoppingRateId\":1,\"Rate\":1.5},{\"$id\":\"7\",\"Title\":\"Graphic\",\"ShoppingRateId\":2,\"Rate\":2.0},{\"$id\":\"8\",\"Title\":\"fetures\",\"ShoppingRateId\":3,\"Rate\":2.0}],\"ListRated\":[{\"$id\":\"9\",\"Title\":\"worth of price\",\"ShoppingRateId\":1,\"Rate\":30.0,\"theCount\":1,\"theSum\":1.5},{\"$id\":\"10\",\"Title\":\"Graphic\",\"ShoppingRateId\":2,\"Rate\":40.0,\"theCount\":1,\"theSum\":2.0},{\"$id\":\"11\",\"Title\":\"fetures\",\"ShoppingRateId\":3,\"Rate\":40.0,\"theCount\":1,\"theSum\":2.0}]},\"StatusCode\":\"Created\",\"Description\":null}"; 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    var myclass = Newtonsoft.Json.JsonConvert.DeserializeObject<ProductDto>(json); 

und Klasse des Produktes:

public class RootObject 
{ 
     public string id { get; set; } 
     public ProductDto Result { get; set; } 
    public string StatusCode { get; set; } 
    public object Description { get; set; } 
} 

public class ProductDto 
    { 

     public string id { get; set; } 
     public IQueryable<MyRateDto> ListRate { get; set; } 

     public IQueryable<MyRateDto> MyRate { get; set; } 

     public IQueryable<ShoppingRateDto> ListRated { get; set; } 
    } 

    public class ShoppingRateDto 
    { 
     public string id { get; set; } 
     public string Title { get; set; } 

     public long ShoppingRateId { get; set; } 

     public double Rate { get; set; } 

     public int theCount { get; set; } 

     public double theSum { get; set; } 
    } 

    public class MyRateDto 
    { 
     public string id { get; set; } 
     public string Title { get; set; } 

     public long ShoppingRateId { get; set; } 

     public double Rate { get; set; } 
    } 

Ich bin ein bisschen verwirrt, wie ich es konvertieren soll. Auch ich habe mit „RootObject“ anstelle von „ProductDto“, aber nichts geändert ...

Einige Fehler:

Additional information: The best overloaded method match for 'Newtonsoft.Json.JsonConvert.DeserializeObject(string)' has some invalid arguments

Additional information: Cannot create and populate list type System.Linq.IQueryable`1[Site.Model.MyRateDto]. Path 'Result.ListRate'

+0

Warum nicht die ProductDto serialisieren, damit Sie die JSON-Zeichenfolge kennen, die Sie für die Desexualisierung benötigen? – Fran

+0

Sie erwähnten eine Ausnahme, welche Ausnahme? Es könnte hilfreich sein, das mit der Frage zu sehen. – neouser99

+0

@Fran so wie denkst du? – ara

Antwort

2

Scheint, wie der Fehler ein anständiger Hinweis ist. Verwenden Sie anstelle von IQueryable (im Grunde alle Schnittstellenkollektionen) eine konkrete Sammlung. z.B. List<T>

Serializer müssen mit konkreten Klassen arbeiten, um sie durch Reflexion instanziieren zu können. Wenn sie Klassendefinitionen lesen und Schnittstellen finden, kann der Serialisierer selten die richtige Implementierung auswählen. Da es viele viele konkrete Instanzen unterschiedlicher Sammlungsschnittstellen gibt, sollten Sie den Serializern konkrete Typen bereitstellen, damit sie ordnungsgemäß funktionieren.