如果你想得到这种格式的响应:
{
"Numbers": [
2,
3,
4,
5,
6,
7,
8,
9,
10,
1,
11,
12,
13,
14,
15,
2,
45
]
}
解决方案 1:JSON 格式化程序
您需要修改 JSON 的序列化方式。 WebAPI 使用 JSON.Net unser 将 WebAPI 响应格式化为 JSON。我们可以按如下方式覆盖 byte[] 格式化程序:
创建自定义格式化程序
public class ByteArrayFormatter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(byte[]);
}
public override bool CanRead
{
get
{
return false;
}
}
public override bool CanWrite
{
get
{
return true;
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var byteArray = (byte[])value;
writer.WriteStartArray();
if (byteArray != null && byteArray.Length > 0)
{
foreach (var b in byteArray)
{
writer.WriteValue(b);
}
}
writer.WriteEndArray();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
在Global.asax.cs 的Application_Start 方法中全局注册格式化程序(注意所有byte[] 类型都将以这种方式序列化):
var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Converters.Add(new ByteArrayFormatter());
创建一个模型,以便您的 JSON 响应具有 Numbers 属性:
public class NumbersModelByte
{
public byte[] Numbers { get; set; }
}
修改您的控制器以使用此模型:
[Route("login")]
[System.Web.Http.AcceptVerbs("GET")]
[System.Web.Http.HttpGet]
public NumbersModelByte Login()
{
byte[] mSessionID = new Session().getmSessionID();
return new NumbersModelByte
{
Numbers = mSessionID
};
}
解决方案 2:又快又脏
您需要返回一个对象(模型)。
NumbersModelInt.cs(注意 int[] 类型)
public class NumbersModelInt
{
public int[] Numbers { get; set; }
}
然后您需要将字节数组中的所有字节转换为响应中的整数:
[Route("Login")]
[HttpPost]
public byte[] Login()
{
byte[] mSessionID = new Session().getmSessionID();
return new NumbersModelInt
{
Numbers = mSessionID.Select(b => (int) b).ToArray()
};
}