C# 返回嵌套数组JSON结果C的WEB API#

C# 返回嵌套数组JSON结果C的WEB API#,c#,json,asp.net-web-api2,C#,Json,Asp.net Web Api2,您好,在下面的场景中请求您的帮助。 我有一个要求,在这里我想从dotnetwebapi返回响应JSON,如下所示 { "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;} }

您好,在下面的场景中请求您的帮助。 我有一个要求,在这里我想从dotnetwebapi返回响应JSON,如下所示

{ "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;}
}
请求您的帮助,按照我的要求返回输出。
谢谢……

最简单的方法可能是创建一个自定义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();
    }
}
然后,您可以使用一个特殊属性来修饰
响应
类,以表示应该使用此转换器对其进行序列化:

[JsonConverter(typeof(ResponseConverter))]
public class Response
{
    public string Status { get; set; }
    public List<SampleData> Series { get; set; }
}
[JsonConverter(typeof(ResponseConverter))]
公众课堂反应
{
公共字符串状态{get;set;}
公共列表系列{get;set;}
}

您可以将列表更改为字典或列表。这样,它应该按照您希望的方式序列化。如果您不想这样做,请查看如何实现
JsonConverter
为类类型
Response
创建一个,并确保服务器全局地将其添加为Json.Net转换器
之一,然后,您必须装饰您的响应类
还有全局添加转换器的选项。如@Drag0nvil True所示,这是另一个可能的选项。您好,谢谢您的回复。在尝试了建议的解决方案后,我得到了低于预期的响应。{“Status”:“OK”,“Series”:{“GREEN”:40.5,“RED”:12.8,“YELLOW”:12.8}}有没有可能让Series的值像这个“Series”:[[“GREEN”,40.5],“RED”,12.8],“YELLOW”,12.8]]很抱歉,我错过了方括号(我在这里还早:)。所以基本上你想要一个数组,其中,内部数组有一个字符串和一个元素的浮点。我不得不说,这有点奇怪,但我不是评判的人。请看我编辑的答案,希望它现在能按要求工作。
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();
    }
}
[JsonConverter(typeof(ResponseConverter))]
public class Response
{
    public string Status { get; set; }
    public List<SampleData> Series { get; set; }
}