使用动态属性名称将数据序列化为json字符串

时间:2014-11-11 20:33:08

标签: c# json.net

我有一个接受键和值的方法。两个变量都可以有动态内容。

key =>是一个动态字符串,可以像所有的一样“LastSentDate”
value =>是一个对象,可以像所有的一样“2014年10月”

由于key是一个动态值,如“LastSentDate”或者传递给方法的任何键,所以我希望json属性是键字符串的值而不是字面上的键本身...

public void SetRowVariable(string key, object value)
{
    var obj = new { key = value }; // key property is literally taken maybe anonym object is not a good idea?
     string jsonString = JsonConvert.SerializeObject(obj);

    // jsonString should have that output => "{ "LastSentDate": "2014-10-10" }"
}

如何序列化我得到希望输出的obj?

“key”属性也必须包含特殊的字符,例如“!”§$%& /()=?“``

我遗憾地使用.NET 3.5。

2 个答案:

答案 0 :(得分:12)

您可以尝试使用Dictionary<string, object>

public void SetRowVariable(string key, object value)
{
    var obj = new Dictionary<string, object>();
    obj[key] = value; // Of course you can put whatever crap you want here as long as your keys are unique
    string jsonString = JsonConvert.SerializeObject(obj);
    ...
}

答案 1 :(得分:12)

您可以使用JObject(在Newtonsoft.Json.Linq中):

var obj = new JObject();
obj[key] = JToken.FromObject(value);

string jsonString = obj.ToString();