1

webrequest を介して一部の xml を逆シリアル化する必要があります。私のデシリアライザは、メッセージの内容をデシリアライズしませんが、エラーは出しません。2行目の名前空間参照を取り出すと、すべて機能します

以下の xml (秘密の業務内容を非表示にするために編集)

<?xml version="1.0" encoding="UTF-8"?>
<ns2:thingees xmlns:ns2="http://someurl.com">
   <thing thing-code="KE">
     <thingelement description="primary" thing-address="address24000" sequence="1"/>
     <thingelement description="backup" thing-address="address5000" sequence="2"/>
   </thing>
   <thing thing-code="PI">
     <thingelement description="primary" thing-address="address26000" sequence="1"/>
     <thingelement description="backup" thing-address="address27000" sequence="2"/>
   </thing>
</ns2:thingees>

私のクラスは以下のとおりです(秘密のビジネスのものを隠すために名前を変更しています)

[Serializable]
[XmlRoot("thingees", Namespace = "http://someurl.com")]
public class thingeeInfo
{
    [XmlElementAttribute("thing")]
    public oneThing[] Items  {get; set;}
}


public partial class oneThing
{
    [System.Xml.Serialization.XmlElementAttribute("thing-element")]
    public  ThingElement[] thingelement {get; set;}

    [System.Xml.Serialization.XmlAttributeAttribute("thing-code")]
    public string thingcode  {get; set;}

}

public partial class ThingElement
{


    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string description {get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute("thing-address")]
    public string thingaddress  {get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string sequence {get; set; }
}

xml のルートにある名前空間参照を取り出すと、すべてがうまく逆シリアル化されます。- XMlRoot で名前空間参照を取り出します

エラーなしで逆シリアル化しますが、アイテムを埋めません。つまり、「アイテム」は null です。「もの」は入力されていません

xml で ns2 を参照する必要がありますか? もしそうなら、どのように?

4

1 に答える 1

2

OK、さらにグーグルで答えを得ました。

[XmlType(AnonymousType = true)] をルートに追加し、[XmlElement(Form = XmlSchemaForm.Unqualified)] を各属性および/または要素に追加する必要があるようです

//  [Serializable]                
[Xmltype(AnonymousType = true)]     
[XmlRoot("thingees", Namespace = "http://someurl.com")]
public class thingeeInfo
{
    [XmlElementAttribute("thing", Form = XmlSchemaForm.Unqualified))]    
    public oneThing[] Items  {get; set;}
}

public partial class oneThing
{
    [XmlElementAttribute("thing-element", Form =XmlSchemaForm.Unqualified))] 
    public  ThingElement[] thingelement {get; set;}

    [XmlAttributeAttribute("thing-code", Form = XmlSchemaForm.Unqualified))]   
    public string thingcode  {get; set;}

}

public partial class ThingElement
{
    [XmlAttributeAttribute(Form = XmlSchemaForm.Unqualified))]                       
    public string description {get; set; }   

    [XmlAttributeAttribute("thing-address", Form = XmlSchemaForm.Unqualified))]     
    public string thingaddress  {get; set; }

    [XmlAttributeAttribute(Form = XmlSchemaForm.Unqualified))]                        
    public string sequence {get; set; }                   
}
于 2013-02-01T16:07:37.723 に答える