Что такое _updatedComponents
? Я предполагаю, что это NetworkComponent[]
- что сделает все очень сложно. Я бы предложил написать обертку типа:
public class ComponentsMessage {
public NetworkComponent[] Components {get;set;}
}
Тогда вы можете связать правильные атрибуты. Если вам нужно поддерживать специальные атрибуты на NetworkComponent
, вам все равно придется использовать переопределения атрибутов (поэтому я вообще не украшал вышеприведенное), но ComponentsMessage
должен быть рад принять атрибуты. *
Либо просто напишите отдельный DTO и отобразите значения.
Если это просто, вы можете просто использовать:
[XmlRoot("components", Namespace = XmlNamespace)]
[XmlType("components", Namespace = XmlNamespace)]
public class ComponentsMessage
{
public const string XmlNamespace = "http://www.example.com/nis/componentsync";
[XmlElement("component")]
public NetworkComponent[] Components { get; set; }
}
В качестве альтернативы, если вы должны использовать переопределения атрибутов, я все равно использовал бы объект-оболочку:
public class ComponentsMessage
{
public NetworkComponent[] Components { get; set; }
}
class Program
{
static void Main()
{
NetworkComponent[] _updatedComponents = new NetworkComponent[2] {
new NetworkComponent{},new NetworkComponent{}
};
const string XmlNamespace = "http://www.example.com/nis/componentsync";
XmlAttributeOverrides ao = new XmlAttributeOverrides();
ao.Add(typeof(ComponentsMessage), new XmlAttributes {
XmlRoot = new XmlRootAttribute("components") { Namespace = XmlNamespace },
XmlType = new XmlTypeAttribute("components") { Namespace = XmlNamespace }
});
ao.Add(typeof(ComponentsMessage), "Components", new XmlAttributes {
XmlElements = {
new XmlElementAttribute("component")
}
});
ComponentsMessage msg = new ComponentsMessage { Components = _updatedComponents };
XmlSerializer serializer = new XmlSerializer(msg.GetType(), ao);
serializer.Serialize(Console.Out, msg);
}
}