Estoy tratando de serializar un objeto que tiene un nombre de nodo duplicado usando C#, la razón por la que tengo que hacer esto es porque estoy construyendo una biblioteca que usa un tercero API.Permitir nombre de nodo duplicado en serialización XML usando C#
La solicitud que necesito para construir se ve así.
<DATASET>
<SITE_ID>123</SITE_ID>
<DATA type=“name”>Secondary List</DATA>
<DATA type="extra" id="CLICKTHRU_URL">http://my.domain.com/</DATA>
<DATA type="extra" id="REPLY_FORWARD_EMAIL">[email protected]</DATA>
<DATA type="extra" id="REPLY_FROM_EMAIL">[email protected]</DATA>
<DATA type="extra" id="REPLY_FROM_NAME">[email protected]</DATA>
<DATA type="extra" id="REPLY_FORWARD_SUBJECT">Customer Replies</DATA>
<DATA type="extra" id="HANDLE_UNSUBSCRIBE"></DATA>
<DATA type="extra" id="HANDLE_AUTOREPLY"></DATA>
<DATA type="extra" id="FOOTER_TEXT">Confidentiality agreement…</DATA>
<DATA type="extra" id="FOOTER_HTML"> Confidentiality agreement…</DATA>
</DATASET>
Mi enfoque es crear una clase que representa la solicitud y el uso de los atributos de serialización XML, la mirada clase como esta:
[XmlRoot("DataSet")]
public class AddListCallHolder : BaseCallHolder
{
private BaseAttributeHolder _name = new BaseAttributeHolder(type: "");
[XmlElement("DATA")]
public BaseAttributeHolder Name
{
get { return _name; }
set { _name = value; }
}
private BaseAttributeHolder _clickthruUrl = new BaseAttributeHolder(id: "CLICKTHRU_URL");
[XmlElement("DATA")]
public BaseAttributeHolder CLICKTHRU_URL
{
get { return _clickthruUrl; }
set { _clickthruUrl = value; }
}
}
La clase base del atributo es:
public class BaseAttributeHolder
{
[XmlAttribute("type")]
public string Type { get; set; }
[XmlAttribute("id")]
public string Id { get; set; }
[XmlText]
public string Value { get; set; }
public BaseAttributeHolder(string value, string id, string type = "extra")
{
Type = type;
Value = value;
Id = id;
}
public BaseAttributeHolder(string id, string type = "extra")
{
Type = type;
Id = id;
}
public BaseAttributeHolder(string type = "extra")
{
Type = type;
}
public BaseAttributeHolder()
{
}
}
Cuando trato de serializar y me opongo obteniendo este error:
The XML element 'DATA' from namespace '' is already present in the current scope. Use XML attributes to specify another XML name or namespace for the element.
¿Hay algún trabajo para serializar este objeto u obtener la estructura de la solicitud?
+1 para una primera pregunta se le preguntó muy bien –