如何在C#中创建JSON对象,其中属性名称是动态设置的?

时间:2013-08-26 20:48:15

标签: .net json

我需要返回一个JSON对象数组,这是SQL查询的结果。 SQL查询可以是任何东西,所以我需要在代码中动态创建属性名称和值。

例如,"从员工中选择first_name,last_name"我想回来:

{ "data": 
   [{
        "first_name": "dave",
        "last_name": "thielen"
    },
    {
        "first_name": "john",
        "last_name": "smith"
    }]
}

但是下一个查询可能是"从订单中选择项目,价格,税,ship_date并希望返回:

{ "data": 
   [{
        "item": "HD TV",
        "price": "598.95"
        "tax": "59.89"
        "ship_date": "2013-08-26"
    },
    {
        "item": "Cables",
        "price": "54.67"
        "tax": "5.47"
        "ship_date": "2013-08-26"
    }]
}

如何在C#中构建它,然后转换为JSON?

谢谢 - 戴夫

2 个答案:

答案 0 :(得分:7)

使用匿名类型,例如前(使用Json.Net),

var json = JsonConvert.SerializeObject(
    new { 
        data = new[]{ 
            new{name="a",surname="b"},
            new{name="c",surname="d"},
        } 
    }
    );

会给出

{"data":[{"name":"a","surname":"b"},{"name":"c","surname":"d"}]}

修改

  

我需要“a”:“b”

var json = JsonConvert.SerializeObject(
        new Dictionary<string, string>() {
            { "a","b" }
        }
    );

输出:{"a":"b"}

<强> EDIT2

一个有趣的人

var dict = new Dictionary<string, string>() {
    { "a","b" },
    { "c","d" }
};

var json = JsonConvert.SerializeObject(
        new { data = dict.Select(x => new[]{x}.ToDictionary(kv => kv.Key, kv => kv.Value)) }
    );

输出:{"data":[{"a":"b"},{"c":"d"}]}

答案 1 :(得分:0)

我的建议是查看Json.NET

还有其他几个库,但我认为这是最常用的。它有一个简单的序列化/反序列化API。