WEB API 到 return 嵌套数组 JSON 结果 C#

WEB API to return Nested Array JSON Result C#

您好,请在下面的场景中寻求帮助。 我有一个要求,我想从 DotNet WEB return 响应 JSON API 如下所示。

{ "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 获取方法

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 输出 returned

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

根据我的要求请求你的帮助return输出。 谢谢......

可能最简单的方法是创建一个自定义 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 class 来表示它应该用这个转换器序列化:

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