2

LINQ to XML 式を使用して、一部の XML データをオブジェクトのリストに逆シリアル化しています。私のオブジェクトは単なるコレクションフィールドです:

public class DataObject
{
 private string Name { get; set; }
 private DateTime Date { get; set; }
} 

LINQ クエリは次のとおりです。

XDocument linqXml = XDocument.Parse(dataToDeserialize.OuterXml)
List<DataObject> MyObjects = (from object in linqXml.Descendants("object")
select new DataObject
{
 Name = object.Element("Name").Value,
 Date = Convert.ToDateTime(object.Element("Date").Value)
} 

これを実行すると、LINQ クエリは FormatException をスローします:「文字列は有効な DateTime として認識されませんでした。」

XML の日付文字列は UTC でフォーマットされています: 2013-05-02T11:25:35-06:00

テストするために、日時の変換を試みたところ、DateTime オブジェクトが正しく返されました。

DateTime dt = Convert.ToDateTime("2013-05-02T11:25:35-06:00");

文字列は新しい DateTime オブジェクトに適切に変換されます。オブジェクトの日付フィールドを文字列型に切り替えてから、別のメソッドで変換すると、変換されます。LINQ クエリの一部の場合は機能しないようです。

私はこれに困惑しています。DateTime.Parse(string) も使用してみましたが、同じ例外がスローされます。クエリ内でこの変換を行う方法はありますか、またはオブジェクトが作成された後にフィールドを変換する必要がありますか?

追加するために編集:

サンプル XML: 各タグの属性は、このデータを取得するために照会しているトランザクション エンジンによって生成されます。デバッグ中に XML のテキストを取得しましたが、Date タグ間に追加の空白がないようです。

<Object>
 <Name __genericType="String" __specificType="[String]" __nodeType="DataField">HelloThere</Name>
 <Date __genericType="Timestamp" __specificType="[TimeStamp]" __nodeType="DataField">2013-05-12T11:08:04-06:00</Date>
</Object>
4

0 に答える 0