使用JSON.net在Dictionary中定义带有数组的类



我正试图在Dictionary<string,string> 中执行以下操作

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

我可以很好地添加名称devName,但我不确定如何将数组的ReturnedData部分添加到列表中,使其以上面的布局返回?

我使用的示例代码:

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));

如您所见,febFormData.Add("ReturnedData",???)是我陷入困境的地方,我真的不知道该怎么做才能让字典像我想要的那样输出正确的JSON格式。

任何帮助都会很棒!

更新

这会是课堂需要的样子吗?

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

正如@Panagiotis Kanavos所建议的那样,您最好使用.NET实体来匹配您的JSON数据。例如:

// 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; }
}

这将使JSON的转换更加容易。

[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)));
}

您总是可以使用例如从JSON数据生成存根。http://json2csharp.com/

这里也"直播".NET小提琴https://dotnetfiddle.net/9ACddp

最新更新