it-swarm.com.de

JSON-Array in C # erstellen

Ok, ich versuche also, POST über eine http-Verbindung zu senden und verwende dazu die JSON-Formatierung. Ich schreibe das Programm dazu in C # und frage mich, wie ich formatieren würde Ein Array von Werten, die als JSON an den Server übergeben werden sollen.

Derzeit habe ich folgendes:

new {name = "command" , index = "X", optional = "0"}

Was in JSON so aussieht:

"name": "command",
"index": "X",
"optional": "0"

Und ich möchte ein Array namens items erstellen, in dem jedes Element diese drei Werte enthält. Es handelt sich also im Wesentlichen um ein Array von Objekten, in dem das Objekt einen Namen, einen Index und ein optionales Feld enthält.

Meine Vermutung war, dass dies in etwa so aussehen würde:

new {items = [(name = "command" , index = "X", optional = "0"), 
              (name = "status" , index = "X", optional = "0")]}

Wäre die Syntax korrekt, würde dies in JSON folgendermaßen übersetzt:

"items": 
[
    {
        "name": "command",
        "index": "X",
        "optional": "0"
    },
    {
        "name": "status",
        "index": "X",
        "optional": "0"
    }
]

Aber offensichtlich mache ich es falsch. Ideen? Jede Hilfe wird geschätzt.

56
Nealon

Du bist nah dran. Dies sollte den Trick machen:

new {items = new [] {
    new {name = "command" , index = "X", optional = "0"}, 
    new {name = "command" , index = "X", optional = "0"}
}}

Wenn es sich bei Ihrer Quelle um eine Art Aufzählung handelte, möchten Sie dies möglicherweise tun:

new {items = source.Select(item => new 
{
    name = item.Name, index = item.Index, options = item.Optional
})};
83

Sie sollten für jedes Element eine Klasse erstellen, anstatt anonyme Objekte zu verwenden. Und in dem Objekt, das Sie serialisieren, sollten Sie eine Reihe dieser Elemente haben. Z.B.:

public class Item
{
    public string name { get; set; }
    public string index { get; set; }
    public string optional { get; set; }
}

public class RootObject
{
    public List<Item> items { get; set; }
}

Verwendung:

var objectToSerialize = new RootObject();
objectToSerialize.items = new List<Item> 
                          {
                             new Item { name = "test1", index = "index1" },
                             new Item { name = "test2", index = "index2" }
                          };

Und im Ergebnis müssen Sie die Dinge nicht mehrmals ändern, wenn Sie die Datenstruktur ändern müssen.

p.s. hier ist sehr nettes Werkzeug für komplexe jsons

33
Leri

Auch bei anonymen Typen (ich bevorzuge nicht, um dies zu tun) - ist dies nur ein anderer Ansatz.

void Main()
{
    var x = new
    {
        items = new[]
        {
            new
            {
                name = "command", index = "X", optional = "0"
            },
            new
            {
                name = "command", index = "X", optional = "0"
            }
        }
    };
    JavaScriptSerializer js = new JavaScriptSerializer(); //system.web.extension Assembly....
    Console.WriteLine(js.Serialize(x));
}

ergebnis:

{"items":[{"name":"command","index":"X","optional":"0"},{"name":"command","index":"X","optional":"0"}]}

10
Royi Namir