2017-11-30 1 views
0

Hallo Fordern Sie Ihre Hilfe im Below-Szenario an. Ich habe eine Anforderung, wo in I Wie unten Antwort JSON von DotNet WEB-API zurückgeben möchten.WEB-API für die Rückgabe von Nested Array JSON Ergebnis C#

{ "Status":"OK", "Series":[["GREEN",40.5],["RED",12.8],["YELLOW",12.8]] } 

Unten sind meine Code-Beispiel und Ausgabe.

public class Response 
{ 
public string Status {get;set;} 
public List<SampleData> Series {get;set;} 
} 

public class SampleData 
{ 
public string ColorCode{get;set;} 
public double ColorVal{get;set;} 
} 

API Get Methode

public Response Get() 
     { 
      Response Objresponse = new Response(); 
      Objresponse.Status ="OK"; 
      List<SampleData> _sampleList = new List<SampleData>(); 
      _sampleList.Add(new SampleData{ ColorCode="GREEN", ColorVal=40.5}); 
      _sampleList.Add(new SampleData{ ColorCode="RED",ColorVal=12.8}); 
      _sampleList.Add(new SampleData{ ColorCode="YELLOW",ColorVal=12.8}); 
      Objresponse.Series = _sampleList; 
      return Objresponse; 
     } 

JSON Ausgabe, die

{ 
"Status":"OK", 
"Series":[ 
{"ColorCode":"GREEN","ColorVal":40.5}, 
{"ColorCode":"RED","ColorVal":12.8}, 
{"ColorCode":"YELLOW","ColorVal":12.8} 
] 
} 

Anfrage Ihre Hilfe zurückgegeben wird die Ausgabe als pro meine Anforderung zurückzukehren. Danke .......

+1

Sie können entweder die Liste ändern in eine Dictionary oder eine Liste . So sollte es serialisieren, wie Sie es wollen. Wenn Sie nicht nachsehen möchten, wie man einen 'JsonConverter 'implementiert, erstellen Sie einen für den Klassen-Typ' Response 'und stellen Sie sicher, dass der Server dies global als einen von Json.Net Convertern hinzufügt – Dragonvil

Antwort

1

Wahrscheinlich der einfachste Weg, eine benutzerdefinierte JsonConverter und verwandeln Sie Ihre Antwort innerhalb Ihrem erforderlichen Format zu erstellen wäre:

public class ResponseConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) => objectType == typeof(Response); 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) => throw new NotImplementedException(); 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     Response originalResponse = (Response)value; 
     writer.WriteStartObject(); 
     writer.WritePropertyName(nameof(originalResponse.Status)); 
     writer.WriteValue(originalResponse.Status); 
     writer.WritePropertyName(nameof(originalResponse.Series)); 
     writer.WriteStartArray();    
     foreach (var val in originalResponse.Series) 
     { 
      writer.WriteStartArray(); 
      writer.WriteValue(val.ColorCode); 
      writer.WriteValue(val.ColorVal); 
      writer.WriteEndArray(); 
     } 
     writer.WriteEndArray(); 
     writer.WriteEndObject(); 
    } 
} 

Dann können Sie Ihre Response Klasse schmücken mit einem speziellen Attribut um anzuzeigen, dass es mit diesem Konverter serialisiert werden soll:

[JsonConverter(typeof(ResponseConverter))] 
public class Response 
{ 
    public string Status { get; set; } 
    public List<SampleData> Series { get; set; } 
} 
+1

' Dann müssen Sie dekorieren Ihre Antwortklasse gibt es auch die Möglichkeit, den Konverter global hinzuzufügen. Wie gezeigt [hier] (https://stackoverflow.com/a/19512471/8579225) – Dragonvil

+0

@ Drag0nvil True, das ist eine andere mögliche Option. –

+0

Hallo Vielen Dank für Ihre Antwort. Ich erhalte die Antwort, nachdem ich die vorgeschlagene Lösung getestet habe. { "Status": "OK", "Serie": { "GRÜN": 40,5, "RED": 12,8, "GELB": 12,8 } } durch Zufall ist es möglich, Serienwert zu machen wie diese "Serie": [["GREEN", 40.5], ["RED", 12.8], ["GELB", 12.8]] –