これはMVCでの私のコードです:
string url = "https://api....";
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
string postData = "<?xml version=\"1.0\"?>" +
"<request>" +
"<login>" + Login + "</login>" +
"<password>" + Password + "</password>" +
"<limit>" +
"<offset>10</offset>" +
"<limit>10</limit>" +
"</limit>" +
"</request>";
try
{
using (StreamWriter requestWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
requestWriter.Write(postData);
}
}
catch (System.Net.WebException ex)
{
return null;
}
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream responseStream = httpWebResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(Class.hotels));
Class.hotels hotel = (Class.hotels)serializer.Deserialize(streamReader);
streamReader.Close();
responseStream.Close();
httpWebResponse.Close();
私の Windows Phone 7 プロジェクトでも同じ機能が得られ (非同期呼び出しで少し変更されています)、動作しています。WP7 プロジェクトから MVC にクラスを追加しましたが、現在 MVC で試しています。すべてが機能していますが、最終的にアイテムが0のホテルを取得しました(ただし、WPではそこにアイテムを取得しました)。文字列に読み込もうとしたstreamReader
ところ、正しい答えが得られたので、問題は逆シリアル化にあるに違いありません。
では、何が問題になるのでしょうか?クラスが間違っている場合、XmlSerializer からエラー メッセージが表示されますが、正しいですか (WP では機能しません)? しかし、他にどこに問題があるのか わかりません。手伝ってくれてありがとう
編集: ホテルクラスの一部:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.17929")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
public partial class hotels : object
{
private int countfield;
private ObservableCollection<hotel> hotelfield;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order = 0)]
public int count
{
get
{
return this.countfield;
}
set
{
this.countfield = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order = 1)]
public ObservableCollection<hotel> hotel
{
get
{
return this.hotelfield;
}
set
{
this.hotelfield = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.17929")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
public partial class hotel : object, System.ComponentModel.INotifyPropertyChanged
{
private int hotIdField;
private int hoyIdField;
...
many properties
...
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order = 0)]
public int hotId
{
get
{
return this.hotIdField;
}
set
{
this.hotIdField = value;
this.RaisePropertyChanged("hotId");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order = 1)]
public int hoyId
{
get
{
return this.hoyIdField;
}
set
{
this.hoyIdField = value;
this.RaisePropertyChanged("hoyId");
}
}
...
many getters, setters
...
および応答の内容 (文字列の xml):
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<hotels>\n <foundHotels>4655</foundHotels>\n <hotel>\n <hotId>12</hotId>\n <hoyId>1</hoyId>\n <bookOnline>0</bookOnline>\n <name>OÁZA Říčany</name>\n <address>\n <couId>1</couId>\n <regId>3</regId>\n <cotId>51</cotId>\n <towId>121</towId>\n <zipId>12093</zipId>\n <name>OÁZA Říčany</name>\n <street>V Chobotě 2112</street>\n <city>Říčany</city>\n <zip>25101</zip>\n <country>Česká republika</country>\n <phone>\n <number>+420 323 601 170</number>\n <number>+420 736 679 097</number>\n <number>724 165 420</number>\n </phone>\n ... many properties ... </hotel>\n <hotel>\n <hotId>13</hotId>\n <hoyId>1</hoyId>\n <bookOnline>0</bookOnline>\n <name>Hotel Maxov</name>\n <address>\n <couId>1</couId>\n <regId>14</regId>\n <cotId>20</cotId>\n <towId>1317</towId>\n <zipId>2492</zipId>\n <name>Hotel Maxov</name>\n <street>Dolní Maxov 710</street>\n <city>Josefův Důl</city>\n <zip>46844</zip>\n <country>Česká republika</country>\n <phone>\n <number>483381085,483381100</number>\n </phone>\n ... many properties of another hotel ... </hotel>\n</hotels>\n"