クライアント側で WCF を使用して RESTful JSON Web サービスを使用しようとしています。このサービスはサード パーティであるため、サーバーの応答を変更することはできません。
データポイントが 1 つしかない場合、サーバーは次のような応答を返しています...
単一データ ポイント
{
"Data":
{
"MyPropertyA":"Value1",
"MyPropertyB":"Value2"
},
}
複数のデータポイントがある場合、このようなもの...
複数のデータ ポイント
{
"Data":
[
{
"MyPropertyA":"Value1",
"MyPropertyB":"Value2"
},
{
"MyPropertyA":"Value3",
"MyPropertyB":"Value4"
},
{
"MyPropertyA":"Value5",
"MyPropertyB":"Value6"
}
],
}
このようにサービス契約を設定しています...
[ServiceContract]
public interface IRewardStreamService
{
[OperationContract]
[WebInvoke]
MyResponse GetMyStuff();
}
そして、このようなデータポイントのデータコントラクト...
[DataContract]
public class MyData
{
[DataMember]
public string MyPropertyA { get; set; }
[DataMember]
public string MyPropertyB { get; set; }
}
単一のデータポイント応答を機能させる唯一の方法は、このような単一のインスタンスプロパティがある場合ですが、これは複数のデータポイント応答を解析しません...
単一インスタンスの応答
[DataContract]
public class MyResponse
{
[DataMember]
public MyData Data { get; set; }
}
複数のデータポイント応答を機能させる唯一の方法は、このような配列/リストインスタンスプロパティがある場合ですが、これは単一のデータポイント応答を解析しません...
複数インスタンスの応答
[DataContract]
public class MyResponse
{
[DataMember]
public IList<MyData> Data { get; set; }
}
問題は、返されるデータ ポイントが 1 つだけの場合に応答で角かっこが省略されていることだと理解していますが、WCF はその構文を逆シリアル化するとうまく機能しないようです。DataContractJsonSerializer に単一要素配列に角かっこを含めないように指示し、そのシリアライザーを使用するようにサービスに指示する方法はありますか? 多分サービスの振る舞いか何か?
どんな方向でも役に立ちます。