C# IXmlSerializable不';在类中使用时无法反序列化

C# IXmlSerializable不';在类中使用时无法反序列化,c#,xml,serialization,xml-serialization,ixmlserializable,C#,Xml,Serialization,Xml Serialization,Ixmlserializable,Stock将填充数据,但Cmp不会填充Stock数据(看起来ReadXml从未被调用过) 我曾尝试向XmlSerializer添加其他类型(例如,新类型[]{typeof(SerializableEnum)}),但没有帮助 我错过了什么?谢谢 我认为它可能与我必须在SerializableEnum类的FromXml中添加的RootElementAttribute类似。IXmlSerializable忽略了枚举具有的XmlRoot属性,因此我添加了该代码以在反序列化时添加它。是否有不同的方法使这一

Stock将填充数据,但Cmp不会填充Stock数据(看起来ReadXml从未被调用过)

我曾尝试向XmlSerializer添加其他类型(例如,新类型[]{typeof(SerializableEnum)}),但没有帮助

我错过了什么?谢谢


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

我假定Company类不实现IXmlSerializable


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

非常感谢。我在自己的项目中将其标记为受保护,以使其不会出现在intellisense中,等等:-/我忘了这会扼杀序列化。。。太糟糕了,当您在受保护项上标记了XmlElement等时,没有编译器规则发出警告。
[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));
    }
}
    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);