2012-04-20 18 views
10

Ich muss ein Json-Objekt dynamisch durch das Durchlaufen von Spalten erstellen. erklärt so ein leeres JSON-Objekt dann Elemente, um es hinzuzufügen dynamisch schließlich erscheinen wie:Erstellen Sie Json dynamisch in C#

Der letzte json Objekt wie folgt sein sollte:

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"}; 

Antwort

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 das ist was ich suche, danke.Ich werde es versuchen und zurückkommen –

+0

Ist es möglich, etwas wie: {"Schulen": [{"name": "test"}, {"name": "testen"}]} mit dem ExpandoObject-Ansatz? Der Name des Arrays, Schools in diesem Beispiel, sollte eine Variable sein. –

+0

@ThomasTeilmann überlegen, eine neue Frage mit mehr Details zu stellen. Ich bin nicht sicher, was Sie nach Ihrem Kommentar suchen. –

11

Sie sollten die JavaScriptSerializer verwenden. http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

EDIT: So etwas wie dies, dass können die tatsächlichen Typen für Sie in JSON :)

Referenz serialisiert?

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

var jsSerializer = new JavaScriptSerializer(); 

var serialized = jsSerializer.Serialize(columns); 

Ausgang:

{"FirstName":"Mathew","Surname":"Thompson","Gender":"Male","SerializeMe":"GoOnThen"} 
+0

Warum verwenden Sie das über json.net? – Oded

+0

Mir ist json.net nicht bekannt, hast du einen Link? Ich habe JavaScriptSerializer für Serialisierung und Deserialisierung in der Vergangenheit verwendet und es hat mir immer gut gedient :) – mattytommo

+1

Oded, weil es im .NET Framework verfügbar ist. Keine DLL von Drittanbietern erforderlich. –

7

ich eine Lösung sehr ähnlich DPeden gefunden, obwohl es nicht notwendig ist, die IDictionary verwenden möchten, können Sie direkt von einem ExpandoObject zu einem JSON konvertieren passieren :

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

und der Ausgang wird:

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