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>