これに関する情報を得るためにネットを精査しましたが、ほとんどの結果は、WCF サービスの作成、またはサービスが制御下にある状況に関するものです。
私は制御できない RESTful JSON サービス用の WCF クライアント プロキシを構築しています。私は基本的な ServiceContract/DataContract パターンを使用しており、フレームワークにできるだけ多くの作業をさせようとしています。
ほとんどの場合、これは正常に機能していますが、この外部サービスからの日時フィールドはすべて特定の形式になっています。
{"SomeObject":
{"details":"blue and round", "lastmodified":"2013/01/02 23:14:55 +0000"}
}
だから私はエラーが発生します:
タイプ MyNamespace.SomeObject のオブジェクトのデシリアライズ中にエラーが発生しました。DateTime コンテンツ '2013/01/02 23:14:55 +0000' は、JSON に必要な '/Date(' で始まり、')/' で終わるものではありません。
私のデータ契約は次のとおりです。
namespace Marshmallow.WebServices.ServiceModels
{
[DataContract]
public class SomeObject
{
[DataMember(Name = "details")]
public string Details { get; set; }
[DataMember(Name = "lastmodified")]
public DateTime LastModified { get; set; }
}
}
私のサービス契約は次のとおりです。
[ServiceContract]
public interface ICoolExternalApi
{
[OperationContract]
[WebGet(UriTemplate = "/something.json",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
[return: MessageParameter(Name = "SomeObject")]
SomeObject GetAccount();
}
私が知りたいのは、WCF が lastmodified フィールドを逆シリアル化する (文字列から DateTime オブジェクトを作成する) 方法を定義するコードをどこに貼り付ければよいかということです。
または、すべての DataContract のすべての DateTime DataMembers を逆シリアル化する方法を定義することをお勧めします。多くの繰り返しコードは必要ありません。
また、サードパーティのデシリアライザーに頼ったり、回避できる場合は、カスタムのデシリアライゼーション メソッドを使用したりしたくありません。