![](/img/trans.png)
[英]How do I serialize an object with TimeSpan and Generic Lists to XML in C#?
[英]In C#, how do I serialize my derived object to this XML?
我正在嘗試將一些XML發送給第三方,而我需要發送的元素的格式如下所示:
<CONTACT>
<CONTACTMETHODS>
<PHONE number='202-555-1234' />
<EMAIL address='myname@gmail.com' />
</CONTACTMETHODS>
</CONTACT>
我在C#中有以下模型,我正在嘗試將其序列化為XML字符串:
[XmlRoot("CONTACT")]
[XmlInclude(typeof(Phone))]
[XmlInclude(typeof(Email))]
public class Contact
{
[XmlArray("CONTACTMETHODS")]
public List<ContactMethod> ContactMethods { get; set; }
}
public abstract class ContactMethod
{
}
[XmlRoot("PHONE")]
public class Phone : ContactMethod
{
[XmlAttribute("number")]
public string Number { get; set; }
}
[XmlRoot("EMAIL")]
public class Email : ContactMethod
{
[XmlAttribute("address")]
public string Address { get; set; }
}
發送到字符串的XML是:
<CONTACT>
<CONTACTMETHODS>
<ContactMethod xsi:type="Phone" number="202-555-1234" />
<ContactMethod xsi:type="Email" address="myname@gmail.com" />
</CONTACTMETHODS>
</CONTACT>
如何獲得序列化程序來創建所需的XML?
編輯:根據要求,以下是序列化對象的代碼:
protected string ObjToXmlString<T>(T obj) where T : class
{
var stringwriter = new System.IO.StringWriter();
var serializer = new XmlSerializer(typeof(T));
serializer.Serialize(stringwriter, obj);
var returnXml = stringwriter.ToString();
return returnXml;
}
我以錯誤的方式思考它。 我不是通過電話和電子郵件派生的抽象類,而是這樣做的:
[XmlRoot("CONTACT")]
[XmlInclude(typeof(CR.Models.XactAnalysis.Phone))]
[XmlInclude(typeof(CR.Models.XactAnalysis.Email))]
public class Contact
{
[XmlArray("CONTACTMETHODS")]
public List<ContactMethod> ContactMethods { get; set; }
}
public class ContactMethod
{
[XmlElement("PHONE")]
public Phone Phone { get; set; }
[XmlElement("EMAIL")]
public Email Email { get; set; }
}
[XmlRoot("PHONE")]
public class Phone
{
[XmlAttribute("number")]
public string Number { get; set; }
}
[XmlRoot("EMAIL")]
public class Email
{
[XmlAttribute("address")]
public string Address { get; set; }
}
似乎工作順暢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.