在c#中动态创建Json

Ala*_*sta 21 c# asp.net json json.net c#-4.0

我需要通过循环遍历列来动态创建Json对象.所以声明一个空的json对象然后动态添加元素,最后看起来像:

最终的json对象应该是这样的:

    List<String> columns=new List<String>{"FirstName","LastName"};

    var jsonObj= new {};

    for(Int32 i=0;i<columns.Count();i++)
    jsonObj[col[i]]="Json" + i;

jsonObj={FirstName="Json0", LastName="Json1"};
Run Code Online (Sandbox Code Playgroud)

Dav*_*den 27

[TestFixture]
public class DynamicJson
{
    [Test]
    public void Test()
    {
        dynamic flexible = new ExpandoObject();
        flexible.Int = 3;
        flexible.String = "hi";

        var dictionary = (IDictionary<string, object>)flexible;
        dictionary.Add("Bool", false);

        var serialized = JsonConvert.SerializeObject(dictionary); // {"Int":3,"String":"hi","Bool":false}
    }
}
Run Code Online (Sandbox Code Playgroud)


mat*_*mmo 16

你应该使用JavaScriptSerializer.那可以将你的实际类型序列化为JSON :)

参考:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

编辑:这样的事情?

var columns = new Dictionary<string, string>
            {
                { "FirstName", "Mathew"},
                { "Surname", "Thompson"},
                { "Gender", "Male"},
                { "SerializeMe", "GoOnThen"}
            };

var jsSerializer = new JavaScriptSerializer();

var serialized = jsSerializer.Serialize(columns);
Run Code Online (Sandbox Code Playgroud)

输出:

{"FirstName":"Mathew","Surname":"Thompson","Gender":"Male","SerializeMe":"GoOnThen"}
Run Code Online (Sandbox Code Playgroud)


ghi*_*ing 14

我发现了一个与DPeden非常相似的解决方案,虽然不需要使用IDictionary,但您可以直接从ExpandoObject一个JSON转换:

dynamic foo = new ExpandoObject();
foo.Bar = "something";
foo.Test = true;
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);
Run Code Online (Sandbox Code Playgroud)

并且输出变为:

{"Bar":"something","Test":true}
Run Code Online (Sandbox Code Playgroud)

  • 这并不完全是他们所要求的。它们的属性名称存在于列表中的字符串中。您刚刚对 Bar 和 Test 进行了硬编码。 (2认同)
  • @ghiscoding 请仔细阅读确切的问题。他们试图解决一个非常具体的问题,简单地对 Bar 和 Test 进行硬编码并不能解决他们的“具体”问题。 (2认同)

And*_*rew 11

使用dynamicJObject

dynamic obj = new JObject();
obj.ProductName = "Elbow Grease";
obj.Enabled = true;
obj.StockCount = 9000;
Run Code Online (Sandbox Code Playgroud)

另一种分配属性的方法:

var obj = new JObject();
obj["ProductName"] = "Elbow Grease";
obj["Enabled"] = true;
obj["StockCount"] = 9000;
Run Code Online (Sandbox Code Playgroud)

或者使用JObject.FromObject

JObject obj = JObject.FromObject(new
{
    ProductName = "Elbow Grease",
    Enabled = true,
    StockCount = 9000
});
Run Code Online (Sandbox Code Playgroud)

它们都会产生这样的结果:

Console.WriteLine(obj.ToString());
// {
//   "ProductName": "Elbow Grease",
//   "Enabled": true,
//   "StockCount": 9000
// }
Run Code Online (Sandbox Code Playgroud)

https://www.newtonsoft.com/json/help/html/CreateJsonDynamic.htm

  • 那不是他们所要求的。它们的属性名称以字符串形式存在于列表中。您的属性是硬编码的。 (2认同)