1124 Stimmen

JSON in C# dynamisches Objekt deserialisieren?

Gibt es eine Möglichkeit, JSON-Inhalte in einen dynamischen C#-Typ zu deserialisieren? Es wäre schön, wenn man die Erstellung einer Reihe von Klassen überspringen könnte, um die DataContractJsonSerializer .

4voto

Ich möchte dies programmatisch in Unit-Tests zu tun, habe ich den Luxus, es heraus zu tippen.

Meine Lösung ist:

var dict = JsonConvert.DeserializeObject<ExpandoObject>(json) as IDictionary<string, object>;

Jetzt kann ich behaupten, dass

dict.ContainsKey("ExpectedProperty");

4voto

Daniel Earwicker Punkte 111630

Dazu würde ich JSON.NET verwenden, um das Low-Level-Parsing des JSON-Streams durchzuführen und dann die Objekthierarchie aus Instanzen der ExpandoObject Klasse.

3voto

Cinchoo Punkte 5707

Avec Cinchoo ETL - eine Open-Source-Bibliothek, die JSON in ein dynamisches Objekt parsen kann:

string json = @"{
    ""key1"": [
        {
            ""action"": ""open"",
            ""timestamp"": ""2018-09-05 20:46:00"",
            ""url"": null,
            ""ip"": ""66.102.6.98""
        }
    ]
}";
using (var p = ChoJSONReader.LoadText(json)
    .WithJSONPath("$..key1")
    )
{
    foreach (var rec in p)
    {
        Console.WriteLine("Action: " + rec.action);
        Console.WriteLine("Timestamp: " + rec.timestamp);
        Console.WriteLine("URL: " + rec.url);
        Console.WriteLine("IP address: " + rec.ip);
    }
}

Ausgabe:

Action: open
Timestamp: 2018-09-05 20:46:00
URL: http://www.google.com
IP address: 66.102.6.98

Beispielgeige: https://dotnetfiddle.net/S0ehSV

Für weitere Informationen besuchen Sie bitte codeproject Artikel

Haftungsausschluss: Ich bin der Autor dieser Bibliothek.

2voto

LoremIpsum Punkte 1276

Versuchen Sie es auf diese Weise!

JSON-Beispiel:

[{
    "id": 140,
    "group": 1,
    "text": "xxx",
    "creation_date": 123456,
    "created_by": "xxx@gmail.co",
    "tags": ["xxxxx"]
  }, {
    "id": 141,
    "group": 1,
    "text": "xxxx",
    "creation_date": 123456,
    "created_by": "xxx@gmail.com",
    "tags": ["xxxxx"]
}]

C#-Code:

var jsonString = (File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(),"delete_result.json")));
var objects = JsonConvert.DeserializeObject<dynamic>(jsonString);
foreach(var o in objects)
{
    Console.WriteLine($"{o.id.ToString()}");
}

0voto

Ash K Punkte 841

Wenn Sie die Erstellung einer Klasse beim Deserialisieren von JSON überspringen möchten, können Sie dies mit NewtonSoft.Json 's DeserializeAnonymousType Methode.

Das unten stehende Beispiel kann sogar JSON in eine Datei deserialisieren リスト von anonymen Objekten.

var json = System.IO.File.ReadAllText(@"C:\TestJSONFiles\yourJSONFile.json");
var fooDefinition = new { a = "", b = 0 }; // type with fields of string, int
var fooListDefinition = Enumerable.Range(0, 0).Select(e => fooDefinition).ToList();

var foos = JsonConvert.DeserializeAnonymousType(json, fooListDefinition);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X