次のような要素を持つ XML があります。
<hour base_forecast="12" datim="29/0" />
そしてエラーを受け取っています:
Unexpected node type Element. ReadElementString method can only be
called on elements with simple or empty content.
これは、要素に値がないためだと思います。この XML は制御できないため、変更できません。これをどのように逆シリアル化しますか?
** 編集 **
属性の値の 1 つが ">6" です ....これが原因でしょうか? もしそうなら、どうすればそれを処理できますか?
** アップデート **
属性の値で > を返さないデータが見つかりました。同じエラーが発生しています。
** Edit #3 * 受信している XML の XSD を作成し、xsd ツールを使用してそれらのクラスを生成しました。この投稿の一番下に追加します。
デシリアライゼーション コードは次のとおりです。
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("xxx");
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
WeatherData Result = new WeatherData();
using (Stream st = resp.GetResponseStream())
{
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "model_data";
xRoot.IsNullable = true;
Result = new XmlSerializer(typeof(WeatherData), xRoot).Deserialize(st) as WeatherData; ** Error here
返された XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE observation SYSTEM "http://private.com/hithere.dtd">
<model_data>
<site a="28/12" b="KXXX">
<hour x="-9999" y="-9999" z="-9999"/>
</site>
</model_data>
データ オブジェクト
[Serializable, XmlRoot("model_data")]
public class WeatherData
{
[XmlElement("site")]
public string City { get; set; }
[XmlAttribute]
public string a { get; set; }
[XmlAttribute]
public string b { get; set; }
[XmlElement(ElementName="hour", IsNullable=true)]
public string Hour { get; set; }
[XmlAttribute]
public string x { get; set; }
[XmlAttribute]
public string y { get; set; }
[XmlAttribute]
public string z { get; set; }
}
XSD ツールによって生成されたクラス
**Removed generated classes, but they are similar to what Hugo posted **