web-dev-qa-db-ja.com

JSONをC#で動的に作成する

列をループして、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"};
20
Alaa Osta
[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}
    }
}
27
David Peden

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

出力:

{"FirstName":"Mathew","Surname":"Thompson","Gender":"Male","SerializeMe":"GoOnThen"}
16
mattytommo

IDedaryを使用する必要はありませんが、DPedenに非常によく似たソリューションが見つかりました。ExpandoObjectからJSON変換に直接渡すことができます。

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

出力は次のようになります。

{"Bar":"something","Test":true}
14
ghiscoding