2013-07-15 192 views
1

我承認在這裏學習,並在序列化和反序列化xml方面取得了進展。反序列化xml元素屬性

我的問題是,如何在下面的XML中訪問URI

<address href="/api/juniper/sd/address-management/addresses/98677" 
uri="/api/juniper/sd/address-management/addresses/98677"> 
    <name>Any-IPv4</name> 
    <address-type>ANY_IPV4</address-type> 
    <description>Predefined any-ipv4 address</description> 
    <host-name /> 
    <id>98677</id> 
</address> 

真的不知道如何在我的課中設置它來反序列化它嗎?

我班現在的樣子:

[XmlRoot("address", Namespace = "")] 
public class address 
{ 
    string _name; 
    string _editVersion; 
    string _addressType; 
    string _ipAddress; 
    string _description; 
    string _hostName; 
    string _zone; 
    string _addressVersion; 
    string _definitionType; 
    string _createdByUserName; 
    string _lastModifiedByUser; 
    string _createdTime; 
    string _lastModifiedTime; 
    string _id; 

    [XmlElement(ElementName = "name")] 
    public string name 
    { 
     get { return _name; } 
     set { _name = value; } 
    } 
    [XmlElement(ElementName = "edit-version")] 
    public string editversion 
    { 
     get { return _editVersion; } 
     set { _editVersion = value; } 
    } 
    [XmlElement(ElementName = "address-type")] 
    public string addresstype 
    { 
     get { return _addressType; } 
     set { _addressType = value; } 
    } 
    [XmlElement(ElementName = "ip-address")] 
    public string ipaddress 
    { 
     get { return _ipAddress; } 
     set { _ipAddress = value; } 
    } 
    [XmlElement(ElementName = "description")] 
    public string description 
    { 
     get { return _description; } 
     set { _description = value; } 
    } 
    [XmlElement(ElementName = "host-name")] 
    public string hostname 
    { 
     get { return _hostName; } 
     set { _hostName = value; } 
    } 
} 

提前感謝!

+0

使用[XmlAttribute](http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributeattribute.aspx)屬性。看看[這個SO條目](http://stackoverflow.com/questions/11330643/serialize-property-as-xml-attribute-in-element)。 – pasty

回答

2

如果你想擁有它的序列化作爲System.Uri使用XmlAttributeAttribute屬性*

[XmlAttribute] 
public string uri 
{ 
    get { return _uri; } 
    set { _uri = value; } 
} 

,你將有一個單獨的屬性爲Uri做到這一點是不可序列。

[XmlAttribute("uri")] 
public string SerializedUri 
{ 
    get 
    { 
     return uri.ToString(); 
    } 
    set 
    { 
     uri = new Uri(value, UriKind.RelativeOrAbsolute); 
    } 
} 

[XmlIgnore] 
public Uri uri { get; set; } 

有了這個用法,在代碼,你會讀/寫,直接向Uri uri屬性而忽略SerializedUri財產。當通過序列化器時,它將忽略該屬性,而是使用SerializedProperty,然後手動序列化/反序列化Uri uri屬性。

*(說的3倍快)

+0

謝謝克里斯,我會給你一個鏡頭。有沒有辦法阻止它的序列化,並且只在反序列化時才適用? –

+0

對不起特拉維斯,我不確定我是否理解。你的意思是你想從XML中讀取「uri」值,但是如果你要序列化/輸出XML,你不希望寫入「uri」屬性? –

+0

如果是這樣的話,一個_quick hack_會讓'SerializedUri' get方法返回null而不是:'public string SerializedUri \t {get {return null; } set {uri = new Uri(value,UriKind.RelativeOrAbsolute); }}。 'XmlSerializer'省略了任何'null'值,並且不包含該屬性;但是當讀取任何現有的/傳統的uri屬性時,setter仍然會執行。 –