2017-01-29 2 views
0
string json string = {\"GetMyClassListResult\":{\"MyClassList\":[{\"Id\":1,\"Amount\":\"5,00\"},{\"Id\":2,\"Amount\":\"10,00\"},{\"Id\":3,\"Amount\":\"20,00\"},{\"Id\":4,\"Amount\":\"25,00\"}],\"ReturnValues\":{\"ErrorCode\":1,\"ErrorDescription\":\"Successful\"}}} 

Wie erhalte „Id“: 1" und ‚Betrag‘: ‚5,00‘Wie bekomme ich json Daten mit C#?

+0

Sie könnten damit beginnen, Ihren Json zu formatieren, damit wir ihn lesen können. –

Antwort

1

Zuerst Sie eine Klasse erklären müssten wie folgt:

class MyClass 
{ 
    [JsonProperty(PropertyName = "Id")] 
    public int Id { get; set; } 

    [JsonProperty(PropertyName = "Amount")] 
    public string Amount { get; set; } 
} 

und dann können Sie die folgenden in Ihrer Methode

var Jsonobj = JObject.Parse(json); 
var list = JsonConvert.DeserializeObject<MyClass[]>(Jsonobj["GetMyClassListResult"]["MyClassList"].ToString()).ToList<MyClass>(); 

Hoffnung, die hilft tun.

+0

Hallo Anu Wiswan ".ToList ()" funktioniert nicht –

+0

@sunayyildiz Haben Sie 'using System.Linq;'? –

+0

Danke Anu, RootObject obj = JsonConvert.DeserializeObject (jsonString); var result2 = obj.GetCardTaskListResult.CardTaskList.Select (p => neu {Id = p.Id, Betrag = p.Amount}). ToArray(); dieser Code ist gute Arbeit :) –

0

zunächst müssen Sie eine Klasse, wo Sie diese Zeichenfolge in Ihr Klassenobjekt Deserialisieren . Sie müssen eine Klasse, die Id und Anzahl Variable enthalten wird.

danach können Sie diese Zeichenfolge an das Objekt Deserialisieren dann können Sie alle Daten zugreifen, die Sie wollen.

1

die hervorragende Json.NET Paket mit LINQ Kombinieren Sie nutzen könnten:

var result = JObject.Parse(json)["GetMyClassListResult"]["MyClassList"] 
        .Select(item => new { Id = item["Id"], Amount = item["Amount"] }) 
        .First(); 

result hat die Eigenschaften Id und Amount mit Werten auf das erste Element in der JSON-Array entsprechenden 1 und "5,00".

Wenn Sie stattdessen ein Array mit allen Elementen wünschen, ersetzen Sie einfach First() durch ToArray().

+0

Hallo Jon, ich bin einfügen mit Newtonsoft.Json.Linq; mit Newtonsoft.Json; aber funktioniert nicht ".Wählen Sie()" anstelle von SelectToken und SelectTokens –

+0

Haben Sie 'using System.Linq;' am Anfang Ihrer Datei? –

+0

Ich bin einfügen mit System.Linq. Ich möchte ToList verwenden .. Ich füge meinen Code ein; "Liste myClassList = neue Liste (); myClassList = JObject.Parse (AntwortText) [" GetMyClassListResult "] [" MyClassList "]. Wählen Sie (Element => Neu {Id = Element [" Id "], Betrag = Element ["Amount"]}). ToList (); " aber nicht funktioniert ... –

1

Sie haben also gerade json und Sie versuchen, es in ein Objekt zu konvertieren, um einige sinnvolle Werte zu erhalten?

I persönlich bevorzuge Arbeiten mit Klassen, wo ich kann. Ich werde meinen rohen JSON in einen JSON to C# Converter werfen. Ich mag JsonUtils persönlich. (Ich habe keine Zugehörigkeit, nur einen großen kostenlosen Service.) Es gibt einige andere da draußen, aber es scheint am robustesten zu sein.

Wenn Sie Ihre RAW-json in dort werfen, erhalten Sie die folgenden Klassen:

public class MyClassList 
{ 
    public int Id { get; set; } 
    public string Amount { get; set; } 
} 

public class ReturnValues 
{ 
    public int ErrorCode { get; set; } 
    public string ErrorDescription { get; set; } 
} 

public class GetMyClassListResult 
{ 
    public IList<MyClassList> MyClassList { get; set; } 
    public ReturnValues ReturnValues { get; set; } 
} 

public class Example 
{ 
    public GetMyClassListResult GetMyClassListResult { get; set; } 
} 

In Ordnung. Jetzt wo wir unsere Modelle haben, können wir den JSON deserialisieren. Die beliebteste Bibliothek zur Manipulation von JSON ist Newtonsoft.Json, die unter NuGet oder direkt zum Download verfügbar ist.

Sie müssen einen Verweis auf diese DLL hinzufügen, wenn Sie sie herunterladen möchten; Nuget wird es automatisch referenzieren, wenn Sie es installieren.

An der Spitze der Klasse Datei, werden Sie

using Newtonsoft.Json; 

zusammen mit Ihren anderen using Anweisungen hinzufügen müssen.

In Ihrer Methode rufen Sie JsonConvert.Deserialize<List<Example>>(json), die Ihnen Ihre Sammlung in POCOs geben wird.

Da nur ein Objekt in der Sammlung vorhanden ist, können Sie die Sammlung .First() aufrufen und dann über die Eigenschaften Id und Amount auf die beiden Werte zugreifen. Sie müssen sicherstellen, dass System.Linq in Ihren using Aussagen auch ist.

Voll Code:

var json = @"{\"GetMyClassListResult\":{\"MyClassList\":[{\"Id\":1,\"Amount\":\"5,00\"},{\"Id\":2,\"Amount\":\"10,00\"},{\"Id\":3,\"Amount\":\"20,00\"},{\"Id\":4,\"Amount\":\"25,00\"}],\"ReturnValues\":{\"ErrorCode\":1,\"ErrorDescription\":\"Successful\"}}}"; 

var collection = JsonConvert.Deserialize<List<Example>>(json); 

var x = collection.First(); 
var amount = x.Amount; 
var id = x.Amount; 

Sie sind dann frei, mit diesen Variablen zu manipulieren oder zu arbeiten, wie Sie für richtig halten. :)

Verwandte Themen