[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将不会填充Stock数据(看起来似乎从未调用过ReadXml)......
我尝试在XmlSerializer中添加其他类型(例如,新的Type [] {typeof(SerializableEnum)}),但这没有帮助。
我在这里缺少什么?感谢。
我认为它可能类似于我必须在SerializableEnum类的FromXml中添加的RootElementAttribute。 IXmlSerializable忽略了枚举所具有的XmlRoot属性,因此我在反序列化时添加了该代码以添加它。有没有不同的方法让这一切都有效?
答案 0 :(得分:2)
我认为公司类 NOT 实现了IXmlSerializable。
默认的Xml序列化忽略所有非公共和只读成员,因此忽略protected StockExchangeForXML
。