2012-04-20 5 views
10

列をループすることで動的にJsonオブジェクトを作成する必要があります。 ので、最終的にのように表示されるように動的にに要素を追加し、空のJSONオブジェクトを宣言:Cで動的に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"}; 

答えて

19
[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} 
    } 
} 
+0

私が探しているものであるYape、ありがとう。私はそれを試してあなたと戻ってきます –

+0

ExpandoObjectのアプローチで、{"Schools":{{"name": "test"}、{"name": "testing"}}}を取得できますか?配列名、この例のSchoolsは変数でなければなりません。 –

+0

@ThomasTeilmannは新しい質問にもっと詳しく質問することを検討します。私はあなたのコメントに基づいてあなたが何をしているか分からない。 –

11

あなたはJavaScriptSerializerを使用する必要があります。それはJSONにあなたのための実際の型をシリアル化することができます:)

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

EDIT:このような何か?

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"} 
+0

なぜjson.netでこれを使用しますか? – Oded

+0

私はjson.netを認識していません、あなたにリンクがありますか?私はJavaScriptSerializerを過去のシリアライゼーションとデシリアライゼーションの両方に使用してきました。それは常に役に立ちました。 – mattytommo

+1

.Netフレームワークで利用できるので、Odedです。サードパーティのDLLは必要ありません。 –

7

私がIDictionaryのを使用する必要はありませんが、あなたはJSONの変換にExpandoObjectから直接渡すことができ、DPedenに非常に似て解決策を見つけました:

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

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

{"Bar":"something","Test":true} 
関連する問題