あなたはこの形式でレスポンスを取得したい場合:
{
"Numbers": [
2,
3,
4,
5,
6,
7,
8,
9,
10,
1,
11,
12,
13,
14,
15,
2,
45
]
}
解決方法1:JSONフォーマッタ
あなたはJSONでシリアライズされていること方法を変更する必要があります。 WebAPIは、WebAPIレスポンスをJSON形式でフォーマットするためにJSON.Netを使用します。
:
が
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
方法(ALL byte[]
タイプは、このように直列化されることに注意)でグローバルにフォーマッタを登録するカスタムフォーマッタを作成します。私たちは、次のようにバイト[]フォーマッタをオーバーライドすることができます
0:あなたのJSON応答が
Numbers
性質を持つように
モデルを作成します。
は、このモデルを使用するようにコントローラを変更します。
解決方法2:迅速かつ汚い
あなたがオブジェクト(モデル)を返す必要があります。
NumbersModelInt.cs(INT []型に気づく)
public class NumbersModelInt
{
public int[] Numbers { get; set; }
}
次に、あなたが応答でint型へのあなたのバイト配列であなたのバイトの全てをキャストする必要があります。
[Route("Login")]
[HttpPost]
public byte[] Login()
{
byte[] mSessionID = new Session().getmSessionID();
return new NumbersModelInt
{
Numbers = mSessionID.Select(b => (int) b).ToArray()
};
}
}
は(入力JSON形式の文字列として-returns)。正しい?デフォルトでは、WebAPIはbyte []をBase64でエンコードされた形式で返します。レスポンスの返信方法は変更できますが、情報をどのように表示したいのですか?それはJSONオブジェクトの16進値の配列でなければなりませんか?それとも、オクテットストリームの応答でなければならないのでしょうか? APIが返すものの例を挙げてください。 –
私はどちらのフォーマットも認識していません。しかし、私が望むフォーマットは以下のようになります:{数字:2,3,4,5,6,7,8,9,10,1,11,12,13,14,15,2,45} ; 。私は、バイト配列自体を返すWebサービスをしたい – cell