2012-07-12 123 views
0
[XmlRoot("company"), DataContract(Name = "company")] 
public class Company : IProvideSerialization 
{ 
    /// <summary> 
    /// Stock exchange the company is in. 
    /// </summary> 
    /// <see cref="https://developer.linkedin.com/documents/company-lookup-api-and-fields"/> 
    /// <remarks>Available only for public companies.</remarks> 
    [XmlElement("stock-exchange"), DataMember(Name = "stock-exchange", EmitDefaultValue = false, IsRequired = false), EditorBrowsable(EditorBrowsableState.Never), Browsable(false)] 
    protected SerializableEnum<StockExchange> StockExchangeForXML; 
    public static Company FromXml(String XML) 
    { 
     XmlSerializer x = new XmlSerializer(typeof(Company)); 
     return (Company)x.Deserialize(new StringReader(XML)); 
    } 
} 

SerializableEnum實現IXmlSerializable。當在類中使用時,IXmlSerializable不會被反序列化

SerializableEnum也有一個可以工作的FromXml;它看起來如下:

public static SerializableEnum<T> FromXml(string XML) 
    { 
     XmlRootAttribute XR = (XmlRootAttribute)System.Attribute.GetCustomAttribute(typeof(T), typeof(XmlRootAttribute)); 
     XmlSerializer x = new XmlSerializer(typeof(SerializableEnum<T>), new XmlRootAttribute() { ElementName = XR.ElementName, IsNullable = true }); 
     return (SerializableEnum<T>)x.Deserialize(new StringReader(XML)); 
    } 

當我這樣做:

 String StockXML = "<stock-exchange><code>NMS</code><name>NASDAQ</name></stock-exchange>"; 
     String CompanyXML = "<company><stock-exchange><code>NMS</code><name>NASDAQ</name></stock-exchange></company>"; 

     SerializableEnum<StockExchange> Stock = SerializableEnum<StockExchange>.FromXml(StockXML); 
     Company Cmp = Company.FromXml(CompanyXML); 

股票將與數據填充,但CMP不會有填充庫存數據(貌似的ReadXml不會被調用)..

我已經嘗試向XmlSerializer添加其他類型(比如,new Type [] {typeof(SerializableEnum)}),但這沒有幫助。

我在這裏錯過了什麼?謝謝。

我認爲它可能類似於我必須在SerializableEnum類的FromXml中添加的那個RootElementAttribute。 IXmlSerializable忽略了枚舉所具有的XmlRoot屬性,所以我添加了代碼以在反序列化時添加它。有沒有不同的方式來使這一切工作togeather?

回答

2

我推測公司類不是實現IXmlSerializable。

默認的Xml序列化忽略所有非公開和只讀成員,因此它忽略protected StockExchangeForXML

+0

非常感謝。我標記爲保護它不會在智能感知等出現在我自己的項目中: - /我忘了這會殺死序列化...太糟糕了,沒有編譯器規則,當您在受保護的項目上標記了XmlElement等時會發出警告。 – NKCSS 2012-07-13 06:56:53

相關問題