2016-04-06 5 views
1

Ich versuche, die folgende in einem Dictionary<string,string>Mit JSON.net definieren Klasse mit Array in Wörterbuch

{ 
    "name": "Bob Barker", 
    "devName": "InformationServices", 
    "ReturnedData": [{ 
     "level_heading": "blah1", 
     "DeliverBestMedicalValue": "blah2", 
     "level_question": "blah3" 
    }] 
} 

Ich kann hinzufügen, die Namen und devName ganz gut, aber ich bin nicht sicher, wie man zu tun gehen Sie über den ReturnedData Teil des Arrays zu der Liste hinzufügen, so dass es wie das obige Layout zurückgibt?

Beispiel Code Ich verwende:

febRecords.RootObject febRecordsData = JsonConvert.DeserializeObject<febRecords.RootObject>(serverResponse); 
Dictionary<string,string> febFormData = new Dictionary<string,string>(); 

febFormData.Add("name", data.firstname.ToString()); 
febFormData.Add("devName", febData["Data"]["DevisionName"].ToString()); 
febFormData.Add("ReturnedData", ???); //<-this is where I am stuck 

return Ok(JsonConvert.SerializeObject(febFormData, Newtonsoft.Json.Formatting.Indented)); 

Wie Sie sehen, febFormData.Add ("ReturnedData", ???); ist der Punkt, an dem ich feststecke und nicht wirklich weiß, was zu tun ist, damit das Wörterbuch das richtige JSON-Format ausgibt, wie ich es möchte.

Jede Hilfe wäre großartig!

Update

Wäre dies, wie die Klasse aussehen muss?

public class theOutput 
{ 
    public string name { get; set; } 
    public string devName { get; set; } 
    public List<string> ReturnedData { get; set; } 
} 
+0

welche Daten möchten Sie tun? –

+2

Warum erstellen Sie ein Wörterbuch Stück für Stück, anstatt eine Klasse mit Eigenschaften wie 'name',' devName' usw. zu verwenden? Auf der anderen Seite könnten Sie mit der Deserialisierung * des Samples Json beginnen und das resultierende Objekt beobachten. 'ReturnedData' sieht aus wie ein Array von Objekten mit den Eigenschaften' level_heading' usw. –

+0

Ich bin mir nicht sicher, aber probiere 'new Dictionary ();' wechsle nach 'new Dictionary (); 'und dann für * ReturnedData * benutze' Dictionary (); '... zum Beispiel:' Dictionary retData = new Dictionary (); retData.Add ("level_heading", "blah1"); ... 'und dann' febFormData.Add ("ReturnedData", retData); '... benutze ich' vb.net', nehme ich an, dass dies die korrekte Umwandlung in 'C#' ist. – nelek

Antwort

2

Wie @Panagiotis Kanavos vorgeschlagen würden Sie wirklich besser dran .NET Einheit mit Ihrem JSON-Daten entsprechen. Zum Beispiel:

// propertyname attributes can be ignored if property names 
// match the json data property names 1:1 

[JsonObject] 
public class MyClass 
{ 
    public MyClass() 
    { 
     ReturnedData = new List<ReturnedData>(); 
    } 

    [JsonProperty(PropertyName = "name")] 
    public string Name { get; set; } 

    [JsonProperty(PropertyName = "devName")] 
    public string DevName { get; set; } 

    [JsonProperty(PropertyName = "ReturnedData")] 
    public List<ReturnedData> ReturnedData { get; set; } 
} 

[JsonObject] 
public class ReturnedData 
{ 
    [JsonProperty(PropertyName = "level_heading")] 
    public string LevelHeading { get; set; } 

    [JsonProperty(PropertyName = "DeliverBestMedicalValue")] 
    public string DeliverBestMedicalValue { get; set; } 

    [JsonProperty(PropertyName = "level_question")] 
    public string LevelQuestion { get; set; } 
} 

Dies würde die Konvertierung zu/von JSON viel einfacher machen.

[TestMethod] 
public void TestSome() 
{ 
    string json = @"{ 
     ""name"": ""Bob Barker"", 
     ""devName"": ""InformationServices"", 
     ""ReturnedData"": [{ 
      ""level_heading"": ""blah1"", 
      ""DeliverBestMedicalValue"": ""blah2"", 
      ""level_question"": ""blah3"" 
     }] 
    }"; 

    var obj = JsonConvert.DeserializeObject<MyClass>(json); 
    Assert.IsTrue(JToken.DeepEquals(JObject.Parse(json), JObject.FromObject(obj))); 
} 

Sie können immer Stubs von Ihnen JSON-Daten erzeugen zum Beispiel unter Verwendung von http://json2csharp.com/

hier "leben" .NET Geige auch https://dotnetfiddle.net/9ACddp