Frage

ich Linq zu verwenden ist versucht zu formen Liste von Daten in eine bestimmte Form zurückgeführt wird, wie Json von einem Ajax-Aufruf.

Diese Daten Gegeben:

var data = new List<string>();
data.Add("One");
data.Add("Two");
data.Add("Three");

Und dieser Code: ** Welche nicht korrekt ist, und ist das, was repariert werden muss !! **

var shaped = data.Select(c =>
    new { c = c }
).ToList();

serializer.Serialize(shaped,sb);
string desiredResult = sb.ToString();

würde Ich mag desiredResult sein:

{
    "One": "One",
    "Two": "Two",
    "Three": "Three"
}

ist es zur Zeit:

{ "c" : "One" },{ "c" : "Two" } etc.

Ein Problem ist, dass auf der linken Seite des Objektinitialisierer ich den Wert von c will, sich nicht c ...

War es hilfreich?

Lösung

Lösung für Richtigkeit angeboten, die Leistung nicht.

        List<string> data = new List<string>()
        {
            "One",
            "Two",
            "Three"
        };

        string result =
            "{ "
            +
            string.Join(", ", data
              .Select(c => @"""" + c + @""": """ + c + @"""")
              .ToArray()
            ) + " }";

Andere Tipps

In json, die "c" in "c": "One" ist der Name der Eigenschaft. Und in der C # Welt, können Sie nicht Eigenschaftsnamen on the fly erstellen (ohne Berücksichtigung System.ComponentModel).

Im Grunde genommen, ich glaube nicht, können Sie tun, was Sie wollen.

Was ist mit JSON.NET ?

Ich bin auf diese alte Frage zu antworten, nur weil alle anderen Antworten grundsätzlich falsch oder unvollständig sind.

JSON wirklich einfach ist, so dass im Grunde, bekommen die JSON Sie wollen, müssen Sie nur den Unterschied zwischen JSON-Arrays erfassen:

["one", "two", "three"]

und JSON-Objekte / Wörterbücher (Objekte und Wörterbücher sind wirklich gleich):

{"a": "one", "b": "two", "c": 3}

Bitte beachten Sie die „c“ Element von einem anderen Typ ist, aber das ist kein Problem für Javascript.

Vor diesem Hintergrund fast jeden Serializer ich unter .NET verwenden (das ist fast immer die große JSON.NET Bibliothek) konvertiert .NET-Objekte oder .NET-Wörterbücher zu JSON-Objekten.

Also, was Sie brauchen, ist eine Liste auf ein Wörterbuch zu konvertieren, und dann füttern die Serializer mit einem Wörterbuch oder Objekt. Eine andere Frage ist, warum würden Sie ein Wörterbuch gerne mit Wert gleich dem Schlüssel, aber ich werde diesen Punkt akzeptieren, auch wenn ich recht fragwürdige bin.

Beispiel gegeben:

        List<string> source = new List<string>() { "a", "b", "c" };

        Dictionary<string, string> dict = source.ToDictionary(el => el, el => el);

        var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(dict);
        // jsonString should be "{'a':'a', 'b':'b', 'c':'c'}", with more or less whitespace depending on formatting
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top