向json添加根元素

时间:2018-09-18 10:46:14

标签: c# arrays json.net

我正在使用NewtosoftJson使用表来格式化json来生成json字符串。这是一个简单的键值对列表,看起来像:

public class items
{
    private string key = String.Empty;
    private string value = String.Empty;
    public string Key
    {
        get
        {
            return key;
        }
        set
        {
            if (value != key)
            {
                key = value;                  
            }
        }
    }
    public string Value
    {
        get
        {
            return value;
        }
        set
        {
            if (value != this.value)
            {
                this.value = value;                  
            }
        }
    }           
}

填充列表然后进行序列化时,我得到以下JSON:

"Items": [  
    {  
        "Key":"FirstValue",
        "Value":"One"
    },
    {  
        "Key":"SecondValue",
        "Value":"Two"
    },
    {  
        "Key":"ThirdValue",
        "Value":"Three"
    }
]

我需要得到的是:

"customData": {
    "items": [
        {
            "Key":"FirstValue",
            "Value":"One"
        },
        {
            "Key":"SecondValue",
            "Value":"Two"
        },
        {
            "Key":"ThirdValue",
            "Value":"Three"
        }
    ]
}

我尝试创建第二个类CustomData,但是看不到如何将原始JSON放入第二个类!您能为我提供构建第二类的正确方法和用于填充第二类的方法的建议吗。

2 个答案:

答案 0 :(得分:1)

创建一个类customData,并在其中创建对类items的引用。然后使用Newtonsoft.Json而不是customData类序列化items类。这样您将拥有:

public class CustomData 
{
    public items[] items; // I would rename the class items to item
}

然后您有一个customData类型的对象,称为customData,您将该对象传递给Newtonsoft。

然后您可以使用以下命令对数据进行序列化/反序列化:

CustomData input = new CustomData();
input.items = []; // Whatever you have at the moment?

string json = JsonConvert.SerializeObject(account) //optionally set Formatting.Indented

CustomData deserialised = JsonConvert.DeserializeObject<CustomData>(json);

答案 1 :(得分:1)

您可以创建一个匿名对象并对其进行序列化:

var objContainingItems = ... // your usual code

var customDataObj = new { customData = objContainingItems };
string json = JsonConvert.SerializeObject(customDataObj);

如果您对序列化感兴趣,这是最方便的解决方案。

如果您还想对其进行反序列化,那么您将需要使用@William Moore答案中指定的类。