私はサードパーティのWebサービスに電話しています。このサービスは、普通の古いXMLで応答を返します。応答のサンプルは次のようになります。LINQでXMLを解析する
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.somedomain.com/Response.xsd">
<Results>
<Result>
<ID>1</PointID>
<Name>Testing</Name>
</Result>
</Results>
</Response>
このXMLをLINQ経由でCLRオブジェクトにロードしようとしています。私のCLRオブジェクトの宣言は次のようになります。私はこのコードを使用すると、
string response = UseWebService();
XDocument xml = XDocument.Parse(response);
var results = from result in xml.Descendants().Descendants()
select new Result
{
ID = Convert.ToInt32(result.Descendants("ID")),
Name = result.Descendants("Name").ToString()
};
List<Result> resultList = results.ToList();
return resultList;
:
[DataContract]
public class Result
{
private int id = 0;
private string name = string.Empty;
[DataMember]
public int ID
{
get { return id; }
set { id = value; }
}
[DataMember]
public string Name
{
get { return name; }
set { name = value; }
}
public Result()
{
}
}
CLRオブジェクトにこのXMLをロードしようとする試みで、私は次のようなアプローチで行きますよ
Unable to cast object of type '<GetDescendants>d__a' to type 'System.IConvertible'.
"ID = Convert.ToInt32 ..."という行をコメントアウトすると動作します。しかし、Nameは "System.Xml.Linq.XContainer + d__a"に設定されます。私は間違って何をしていますか? XMLをいくつかのPOCOにロードしたいだけです。
あなたが提供できる洞察力をありがとうございます。
「オブジェクトのインスタンスがオブジェクトのインスタンスに設定されていません」が表示されるのはなぜですか。このアプローチに誤りがありますか?これはとても奇妙です。 – Villager