2012-04-28 23 views
1

は、私はこのような要素を持ついくつかのXMLを持っている属性価値がない。私はこのXMLを制御しないので、変更することはできません。どのように私はこれを逆直列化するだろうか?逆シリアル化のXML要素が

** EDIT **

属性の値の一つは "> 6" である....これが犯人だろうか?もしそうなら、私はそれをどのように扱うのですか?

**更新**

属性の値で返していなかったいくつかのデータを>が見つかりました。同じエラーが発生しています。

**編集#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 ** 
+0

」の親から 'ReadElementString'を呼び出している可能性がありますか、それともあなたの読者があなたのどこにいるのでしょうか? – Tung

+0

投稿を編集してコードを提供します。 – TheGeekYouNeed

+0

ストリームをXmlDocumentにダンプしてデシリアライズしようとすると、デシリアライザがエラーをスローした時の要素時間にあることがわかります。この形式では、正しい行と位置にエラーがスローされ、も開始されます。 – TheGeekYouNeed

答えて

0

この部分を見てみると:

[XmlElement("site")] 
public string City { get; set; } 

<Site><Hour>が含まれているので、それは単純または空のコンテンツと要素ではない、私は推測?

編集:実際には全部が疑わしいようです。 データオブジェクトは、XMLのすべての階層情報を無視しているようです。

どうやってこのようなことができますか?私は、XSDツールを使用してクラスを生成するとき

[Serializable, XmlRoot("model_data")] 
public class WeatherData 
{ 
    [XmlElement("site")] 
    public City[] City { get; set; } 
} 

public class City 
{ 
    [XmlAttribute] 
    public string a { get; set; } 

    [XmlAttribute] 
    public string b { get; set; } 

    [XmlElement(ElementName="hour", IsNullable=true)] 
    public Hour Hour { get; set; } 
} 

public class Hour 
{  
    [XmlAttribute] 
    public string x { get; set; } 

    [XmlAttribute] 
    public string y { get; set; } 

    [XmlAttribute] 
    public string z { get; set; } 
} 
+0

オブジェクトクラスを変更してXML要素名を正確に一致させましたが、同じエラーがまだ発生しています。 – TheGeekYouNeed

+0

@ TheGeekYouNeed:それは私を心配する名前の矛盾ではありません。子要素を持つ要素を文字列に配置しようとしていますが、その文字列に含まれる文字列は何ですか? – HugoRune

+0

xmlからXSDを作成した後、そのXSDからクラスを生成しましたが、同じエラーがまだ発生しています。 – TheGeekYouNeed

0

、私は同じエラーを取得しますが、エラーが表示されましたが、私がコメントアウトした行から投げ出されます。

私はVSを終了し、ディスクのクリーンアップを実行しました。私のコードをもう一度実行してください。 "セキュリティ上の理由から、DTDはこのXML文書などで禁止されています。"というメッセージを受け取りました。そこで、読者をDtdProcessing.Parseに設定して、もう一度コードを実行しました。

成功しました。

+1

あなたのコードを共有してもいいですか? – Esen

関連する問題