[英]XML Object Serialization
我试图将数据发布到仅接受XML的Web应用程序中。 我已经在c#中创建了对象(如下所示),并且正在使用XmlSerializer
将对象序列化为XML,但无法弄清楚如何构造对象以获取接收应用程序所需的结果XML:
所需的结果XML
<recipients>
<gsm messageId="clientmsgID1">number1</gsm>
<gsm messageId="clientmsgID2">number2</gsm>
<gsm messageId="clientmsgID3">number3</gsm>
<gsm messageId="clientmsgID4">number4</gsm>
</recipients>
我的物件
public class recipients
{
public List<gsm> gsm{ get; set; }
public recipients()
{
gsm = new List<gsm>();
}
}
public class gsm
{
[XmlText]
public string number { get; set; }
[XmlAttribute]
public string messageId{ get; set; }
}
我生成的XML
<recipients>
<gsm>
<gsm messageId="clientmsgID1">number1</gsm>
</gsm>
</recipients>
使用xsd.exe并尝试传递上面显示的xml文件。 这将创建一个xsd文件,使用该xsd创建一个cs类,然后在您的应用程序中使用该cs类,该类将在序列化时创建相同的XMl,例如
C:> xsd gsm.xml,其中gsm.xml将具有您上面粘贴的xml标记
接着
C:> xsd gsm.xsd / c生成CS类
using System.Xml.Serialization;
public partial class recipients {
private recipientsGsm[] itemsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("gsm", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
public recipientsGsm[] Items {
get { return this.itemsField; }
set { this.itemsField = value; }
}
}
public partial class recipientsGsm {
private string messageIdField;
private string valueField;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string messageId {
get { return this.messageIdField; }
set { this.messageIdField = value; }
}
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value {
get { return this.valueField; }
set { this.valueField = value; }
}
}
您只需要添加
[System.Xml.Serialization.XmlElementAttribute("gsm", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
在课堂上获得者
public class recipients
{
[System.Xml.Serialization.XmlElementAttribute("gsm", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
public List<gsm> gsm{ get; set; }
public recipients()
{
gsm = new List<gsm>();
}
}
它应该工作
您可以使用属性[XmlElement(“ gsm”)]标记属性gsm
完整的课程清单:
public class recipients
{
[XmlElement("gsm")]
public List<gsm> gsm { get; set; }
public recipients()
{
gsm = new List<gsm>();
}
}
public class gsm
{
[XmlText]
public string number { get; set; }
[XmlAttribute]
public string messageId { get; set; }
}
样例代码:
var a = new recipients();
a.gsm.Add(new gsm() { messageId = "1", number = "aaa" });
a.gsm.Add(new gsm() { messageId = "2", number = "bbb" });
XmlSerializer serializer = new XmlSerializer(typeof(recipients));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
serializer.Serialize(Console.Out, a, ns);
我的应用程序的输出:
<?xml version="1.0"?>
<recipients>
<gsm messageId="1">aaa</gsm>
<gsm messageId="2">bbb</gsm>
</recipients>
解决了
在尝试其他建议之前,我设法自己解决了该问题,并认为我还是应该在此处发布此修复程序。
我使recipients
实现List<gsm>
。 完成:)
public class recipients: List<gsm>
{
private List<gsm> gsms{ get; set; }
public recipients()
{
gsms = new List<gsm>();
}
public IEnumerator<gsm> GetEnumerator()
{
return gsms.GetEnumerator();
}
}
public class gsm
{
[XmlText]
public string number { get; set; }
[XmlAttribute]
public string messageId { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.