2017-11-13 2 views
0

Ich habe ein Problem mit Deserialisieren den folgenden Beispiel JSON-Schnipsel:Newtonsoft JSON Deserialize Schnittstelle

{ 
    "list":{ 
     "A":{"ClassA":{"PropertyA":"test"}}, 
     "B":{"ClassB":{"PropertyB":"test"}} 
    } 
} 

Mit meinem KlasseA:

public class ClassA:IInterface{ 
    public String PropertyA{get; set;} 
} 
public class ClassB:IInterface{ 
    public String PropertyB{get; set;} 
} 

Ich möchte die JsonConverter ein KlasseA oder ClassB mit dem propertyâ erstellen oder PropertyB aus dem JSON. Der ClassA oder ClassB ist in ein Dictionary eingebettet.

Ich kann auch den vollständigen Klassennamen mit Namespace dort, aber ich war nicht wirklich in der Lage, es zum Laufen zu bringen.

Vielen Dank im Voraus für jede Hilfe

+0

Ich denke, dass keine gültige Json ist. Die umschließenden Klammern fehlen und es gibt keine Listen-Syntax – harandk

+0

Es ist nur ein Ausschnitt. Ich werde aktualisieren. – Alex

+0

Für Listen benötigen Sie '[]' – harandk

Antwort

1

Sie benötigen einen Wrapper-Klasse:

public class ListClass 
{ 
    public WrapperList List { get; set; } 
} 

public class WrapperList 
{ 
    public WrapperA A { get; set; } 
    public WrapperB B { get; set; } 
} 

public class WrapperA 
{ 
    public ClassA ClassA { get; set; } 
} 

public class WrapperB 
{ 
    public ClassB ClassB { get; set; } 
} 

public class ClassA : IInterface 
{ 
    public String PropertyA { get; set; } 
} 

public class ClassB : IInterface 
{ 
    public String PropertyB { get; set; } 
} 

Dann:

var list = JsonConvert.DeserializeObject<ListClass>(json); 
+0

Ich möchte diese Wrapper-Klassen vermeiden. Aber danke für Sie Hilfe – Alex

+0

Sie können nicht, die Wrapper spiegeln die von Ihnen bereitgestellten JSON wider. Wenn Sie den JSON ändern können, sollten Sie in der Lage sein, die Wrapper loszuwerden. Der ideale JSON wäre nur: {"ClassA": {"PropertyA": "test"}, "ClassB": {"PropertyB": "test"}} – ceferrari