it-swarm.com.de

So ordnen Sie JSON C # -Objekten zu

Ich habe Probleme mit dem Verständnis, wie dies geschehen kann. 

Grundsätzlich haben wir eine API, der Benutzer sendet eine JSON des Formats: (Entschuldigen Sie den Code, falls er nicht perfekt ist, aber Sie verstehen)

{"Profile": [{
    "Name":"Joe",
    "Last :"Doe",
    "Client":
    {
        "ClientId":"1",
        "Product":"Apple",
        "Message":"Peter likes apples"
    },
    "Date":"2012-02-14",
}]}

Ok, ich bin mir nicht sicher, ob ich das JSON-Format richtig formatiert habe, aber jetzt ist mein Problem.

Ich habe eine Klasse namens Profile mit den Parametern Name, Last und ein Objekt als eines seiner Mitglieder namens Client sowie die Eigenschaft Date.

Etwas wie das:

public class Profile
  {
     public string Name {get; set;}
     public string Last {get; set;}
     public Client client {get; set;}
     public DateTime dDate {get; set;}   
  }

Im Grunde bin ich nicht sicher, wie ich die JSON packen und dann meinem Objekt zuordnen kann.

Jede Hilfe beim "Helfen" würde mich sehr freuen.

20
user710502

Sie können Json.NET verwenden, um Ihren Json-String als (mit einigen Änderungen an Ihren Klassen) zu deserialisieren.

var yourObject =  JsonConvert.DeserializeObject<Root>(jsonstring);


public class Root
{
    public Profile[] Profile;
}

public class Profile
{
    public string Name { get; set; }
    public string Last { get; set; }
    public Client Client { get; set; }
    public DateTime Date { get; set; }
}

public class Client
{
    public int ClientId;
    public string Product;
    public string Message;
}
34
L.B

Sie können dafür eine JSON-Bibliothek verwenden, beispielsweise Newtonsoft.Json , die kostenlos ist. Es wird Json automatisch Ihren Typen zugeordnet.

Probe:

    public static T Deserialize<T>(string json)
    {
        Newtonsoft.Json.JsonSerializer s = new JsonSerializer();
        return s.Deserialize<T>(new JsonTextReader(new StringReader(json)));
    }

Es gibt auch ein NuGet-Paket.

6
Marek

Die einfachste Methode, die ich kenne, ist die Verwendung von JSON.Net von newtonsoft . Zum besseren Verständnis mache ich immer übereinstimmende Klassen in C # mit demselben Namen. Dann ist es einfacher, es zu deserialisieren. Wenn es sich um ein Array von Objekten in js handelt, wird es einer Liste von Objekten mit den gleichen Namen in C # ..__ zugeordnet Es ist ein bisschen knifflig. Wenn die clientseitige Validierung und Datetime.tryParse auf der Serverseite durchgeführt werden, werden die Bindestriche oder Schrägstriche berücksichtigt.

var serializer = new JavaScriptSerializer();
List<abc> abcList = serializer.Deserialize<List<abc>>(PassedInJsonString);
1
Buzzzzzzz

DataContractJsonSerializer erledigt den Job, verwendet jedoch ein komplexeres Format für die DateTime-Serialisierung. 

0
lazyGoose