私は原子テストのXML構造を使用してODataインターフェースでユニットテストを実行できるように、特別なクライアントアプリケーションを作成しています。 すべて正しく動作しているようですが、プロパティとしてDateTime値を渡す必要があるときに問題に遭遇しています。ODataでDateTime値を提供する
Iは、特定の形式でオブジェクトのプロパティからDateTime値を抽出して格納する次のコードを書いた:
private static void GenerateProperty<T>(StringBuilder xml, T obj, PropertyInfo info)
{
// Extract the information about the property if it contains a value.
if (info.GetValue(obj, null) == null) return;
string type = info.GetGetMethod().ReturnType.ToString().Split('.').Last();
string value = info.GetValue(obj, null).ToString();
if (type == "DateTime")
value = ((DateTime)info.GetValue(obj, null)).ToString("yyyy-mm-ddThh:mm:ss");
if (type == "Boolean") value = value.ToLower();
// Append the property to the generated XML.
xml.Append(type.ToLower().Equals("string") ?
string.Format("<d:{0}>{1}</d:{0}>", info.Name, value) :
string.Format("<d:{0} m:type=\"Edm.{1}\">{2}</d:{0}>", info.Name, type, value));
}
コードは反射に重く、それは的外れです。 DateTimeのため、このコードによって返される値は、次の形式である:2011-49-13T11:49:41Z
しかし、私は私のODataサービスから次のエラーを受信しています:
エラー処理要求 ストリーム。要求ペイロード の値を 'Created'プロパティの 'System.DateTime'(これは プロパティの予想タイプ)に変換する際にエラーが発生しました。詳細は の内部例外を参照してください。 文字列 '2011-49-13T11:49:41Z'は有効なAllXsd の値ではありません。 にSystem.FormatException System.Dataで System.Data.Services.Parsing.WebConvert.StringToPrimitiveでSystem.Xml.XmlConvert.ToDateTime(文字列S、 XmlDateTimeSerializationMode dateTimeOption) (文字列テキスト、 タイプたtargetType) ました。 Services.Serializers.PlainXmlDeserializer.ConvertValuesForXml( 値、文字列プロパティ名、タイプtypeToBeConvertedオブジェクト)
だからどうやらそれはDateTime書式を理解していないが、私はここに掲載のドキュメントを見たとき:http://www.odata.org/developers/protocols/overview#AbstractTypeSystem
私はそれが有効であると思います。誰でもこれに関する経験はありますか?
あなたのコードは 'Z' AFAICTを出力していませんが、あなたのエラーメッセージは間違いなくあなたの実際のコードが暗示されているようです。 –