2017-11-30 19 views
0

こんにちは、下のシナリオであなたのヘルプをリクエストしてください。 私は以下のようにDotNet WEB APIからレスポンスJSONを返す必要があるという要件を持っています。入れ子配列を返すWEB API JSON結果C#

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

以下は私のコードサンプルと出力です。

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は

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

要求私の要件ごとに出力を返すようにあなたの助けが返される方法

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出力を取得します。 は.......

+1

あなたは辞書<文字列、ダブル>またはリスト<文字列、ダブル>に一覧を変更することができます。そうすれば、それはあなたが望むように直列化する必要があります。それをしたくない場合は、 'JsonConverter'を実装する方法を調べ、' Response'クラスのクラスを作成し、サーバーがこれをJson.Netコンバーターの1つとしてグローバルに追加することを確認してください。 – Dragonvil

答えて

1

をいただき、ありがとうございますおそらく最も簡単な方法は、カスタムJsonConverterを作成し、必要な形式に内部のあなたの応答を変換するために、次のようになります。

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(); 
    } 
} 

その後、あなたはResponseクラスを飾ることができますそれはこのコンバータをシリアル化する必要があることを示すために特別な属性を持つ:

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

'次に、あなたのResponseクラス 'には、コンバータをグローバルに追加するオプションもあります。 [ここ](https://stackoverflow.com/a/19512471/8579225)に示されているように – Dragonvil

+0

@ Drag0nvilそれはもう一つの可能​​なオプションです。 –

+0

こんにちは、ありがとうございます。ソリューションを試してみると、私は応答を下回っています。 { "ステータス": "OK"、 "シリーズ":{ "GREEN":40.5、 "RED":12.8、 "YELLOW":12.8 } }万が一の系列値を作成することも可能です"[GREEN"、40.5]、[RED "、12.8]、[" YELLOW "、12.8]] –

関連する問題