2017-09-14 4 views
0

Meine Nutzlast würde wie folgt aussehen:C# JSON Deserialize Dictionary <Zeichenfolge, Wörterbuch <Zeichenfolge, Zeichenfolge >> optional?

{ 
    "REFERENCE": "1", 
    "FIELDS" : { 
     "CUST" : "1234", 
     "PROD" : "PR2134", 
     "LIMIT" : "12345", 
     "LINES" : { 
       "LINE" : "01", 
       "DATA" : "12" 
     } 
    } 
} 

Mein Objekt hat einfach folgendes:

public class TriggerRequest 
{ 
    public string reference { get; set; } 
    public Dictionary<string, string> fields { get; set; } 

} 

Offensichtlich ist dies nicht behandelt die LINES-Objekt. Wie kann ich eine Klasse erstellen, die eine eingehende Nutzlast deserialisiert, wo so etwas wie LINES dynamisch ist (dh ich kann in der Nutzlast an einem beliebigen Punkt in jedem Wörterbuch> senden und es wird richtig deserialisieren. Ist das etwas, wenn ich eine benutzerdefinierte erstellen müssen JsonConverter ?

+0

Ihren eigenen JSON-Konverter rollen Es ist, weil es ist Groß- und Kleinschreibung .. – Steve

+1

Vor dem Start ändern Sie in einige der Paketen bereits zur Verfügung, einschließlich aussehen sollten JSON.net und Silverlight 'System.Json' die meisten von ihnen haben die Fähigkeit, dynamische oder' Wörterbuch deserialisieren '' –

+0

JObject obj = JsonConv ert.DeserializeJson (string json) 'aus der' Newtonsoft.Json' Bibliothek (AKA Json.net) würde wahrscheinlich gut funktionieren, für das, was Sie versuchen zu erreichen. –

Antwort

2

könnten Sie dynamic stattdessen verwenden.

public class TriggerRequest 
{ 
    public string reference { get; set; } 
    public dynamic fields { get; set; } 
} 

Diese erlauben sollten Sie (string)request.fields.lines.data direkt im Code zugreifen, zum Beispiel.

wenn Sie jedoch bei der Kompilierung nicht wissen, was Werte wird dort sein, können Sie bevorzugen, Felder ein JObject zu machen .

public class TriggerRequest 
{ 
    public string reference { get; set; } 
    public JObject fields { get; set; } 
} 

Dies gibt Ihnen die Möglichkeit, Code zu schreiben, was in jedem seiner Eigenschaften Art von Daten überprüft und entsprechend reagieren.

Schließlich, wenn Sie tun wissen, welche Eigenschaften Sie erwarten fields zu haben, erstellen Sie eine separate Klasse dafür.

public class TriggerRequest 
{ 
    public string reference { get; set; } 
    public TriggerRequestFields fields { get; set; } 
} 

public class TriggerRequestFields 
{ 
    public string cust {get;set;} 
    ... 
    public TriggerRequestLines lines {get;set;} 
} 

public class TriggerRequestLines 
{ 
    public string line {get;set;} 
    public string data {get;set;} 
} 
0

Try

public Dictionary<string, dynamic> fields { get; set; } 

Mit

public Dictionary<string, object> fields { get; set; } 
Verwandte Themen