繁体   English   中英

在类中使用时,IXmlSerializable不会反序列化

[英]IXmlSerializable doesn't get deserialized when used in class

[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。

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添加其他类型(例如,新的Type [] {typeof(SerializableEnum)}),但这没有帮助。

我在这里错过了什么? 谢谢。

我认为它可能类似于我必须在SerializableEnum类的FromXml中添加的RootElementAttribute。 IXmlSerializable忽略了枚举所具有的XmlRoot属性,因此我在反序列化时添加了该代码以添加它。 是否有不同的方法使这一切工作togeather?

我推测,公司类没有实现IXmlSerializable的。

默认的Xml序列化忽略所有非公共和只读成员,因此它忽略protected StockExchangeForXML

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM