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