2011-09-13 9 views
10

私は原子テストの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

私はそれが有効であると思います。誰でもこれに関する経験はありますか?

+0

あなたのコードは 'Z' AFAICTを出力していませんが、あなたのエラーメッセージは間違いなくあなたの実際のコードが暗示されているようです。 –

答えて

17

yyyy-mm-ddThh:mm:ss

yyyy-MM-ddTHH:mm:ssZ

+0

それを解決した、ありがとう –

+0

クール、あなたが答えるようにマークすることができますか? – kmcc049

+0

完全性:小数点以下の秒数やタイムゾーンオフセットが必要な場合は、 '2016-04-30T23:59:59.999 + 02:00'のようなものを使用してください。 '2016-04-30T23:59:59.999%2B02:00' –

3

のToString( "O")があまりにも問題を解決する必要があります。

+0

これは実際には機能しません。アップロード時にエラーが発生します。ほとんどの場合、サポートされていない余分な数字があります。 –

関連する問題