我正在尝试使用C#序列化一个具有重复节点名称的对象,我需要这样做的原因是因为我正在构建一个使用第三方API的库。
我需要构建的请求如下所示。
属性的基类是:
当我尝试序列化一个对象时,出现了以下错误:
我需要构建的请求如下所示。
<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">support@my.domain.com</DATA>
<DATA type="extra" id="REPLY_FROM_EMAIL">forward@my.domain.com</DATA>
<DATA type="extra" id="REPLY_FROM_NAME">8@yahoo.com</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>
我的方法是创建一个代表请求的类,并使用XML序列化属性,该类看起来像这样:
[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; }
}
}
属性的基类是:
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()
{
}
}
当我尝试序列化一个对象时,出现了以下错误:
是否有任何解决方法可以序列化此对象或获取请求的结构。XML元素'DATA'来自命名空间''已经存在于当前范围内。使用XML属性为元素指定另一个XML名称或命名空间。