C# XML对象序列化
我试图将数据发布到只接受XML的web应用程序。我已经在c#中创建了对象(如下所示),并且正在使用C# XML对象序列化,c#,xml,serialization,xml-serialization,xmlserializer,C#,Xml,Serialization,Xml Serialization,Xmlserializer,我试图将数据发布到只接受XML的web应用程序。我已经在c#中创建了对象(如下所示),并且正在使用XmlSerializer将对象序列化为XML,但无法确定如何构造对象以获得接收应用程序所需的结果XML: 所需的结果XML <recipients> <gsm messageId="clientmsgID1">number1</gsm> <gsm messageId="clientmsgID2">number2</gsm>
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>
<recipients>
<gsm>
<gsm messageId="clientmsgID1">number1</gsm>
</gsm>
</recipients>
第一
2号
3号
4号
我的对象
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; }
}
公共类收件人
{
公共列表gsm{get;set;}
公众受助人()
{
gsm=新列表();
}
}
公共类gsm
{
[XmlText]
公共字符串编号{get;set;}
[XmlAttribute]
公共字符串messageId{get;set;}
}
我的结果XML
<recipients>
<gsm messageId="clientmsgID1">number1</gsm>
<gsm messageId="clientmsgID2">number2</gsm>
<gsm messageId="clientmsgID3">number3</gsm>
<gsm messageId="clientmsgID4">number4</gsm>
</recipients>
<recipients>
<gsm>
<gsm messageId="clientmsgID1">number1</gsm>
</gsm>
</recipients>
第一
使用xsd.exe并尝试传递上面显示的xml文件。这将创建一个xsd文件,使用这个xsd创建一个cs类,然后在应用程序中使用这个cs类,它将在序列化时创建相同的XMl
e、 g
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;
公共部分类收件人{
私人接收人SM[]项字段;
///
[System.Xml.Serialization.XmlElementAttribute(“gsm”,Form=System.Xml.Schema.XmlSchemaForm.Unqualified,IsNullable=true)]
公众接受者SM[]项目{
获取{返回this.itemsField;}
设置{this.itemsField=value;}
}
}
公共部分类接受者{
私有字符串messageIdField;
私有字符串值字段;
///
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串消息ID{
获取{返回this.messageIdField;}
设置{this.messageIdField=value;}
}
///
[System.Xml.Serialization.XmlTextAttribute()]
公共字符串值{
获取{返回this.valueField;}
设置{this.valueField=value;}
}
}
使用xsd.exe并尝试传递上面显示的xml文件。这将创建一个xsd文件,使用这个xsd创建一个cs类,然后在应用程序中使用这个cs类,它将在序列化时创建相同的XMl
e、 g
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;
公共部分类收件人{
私人接收人SM[]项字段;
///
[System.Xml.Serialization.XmlElementAttribute(“gsm”,Form=System.Xml.Schema.XmlSchemaForm.Unqualified,IsNullable=true)]
公众接受者SM[]项目{
获取{返回this.itemsField;}
设置{this.itemsField=value;}
}
}
公共部分类接受者{
私有字符串messageIdField;
私有字符串值字段;
///
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串消息ID{
获取{返回this.messageIdField;}
设置{this.messageIdField=value;}
}
///
[System.Xml.Serialization.XmlTextAttribute()]
公共字符串值{
获取{返回this.valueField;}
设置{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>();
}
}
公共类收件人
{
[System.Xml.Serialization.XmlElementAttribute(“gsm”,Form=System.Xml.Schema.XmlSchemaForm.Unqualified,IsNullable=true)]
公共列表gsm{get;set;}
公众受助人()
{
gsm=新列表();
}
}
而且它应该可以工作您只需添加
[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>();
}
}
公共类收件人
{
[System.Xml.Serialization.XmlElementAttribute(“gsm”,Form=System.Xml.Schema.XmlSchemaForm.Unqualified,IsNullable=true)]
公共列表gsm{get;set;}
公众受助人()
{
gsm=新列表();
}
}
而且它应该可以工作您可以使用属性[xmlement(“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; }
}
我的应用程序的输出:
<?xml version="1.0"?>
<recipients>
<gsm messageId="1">aaa</gsm>
<gsm messageId="2">bbb</gsm>
</recipients>
aaa
bbb
您可以使用属性[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; }
}
我的应用程序的输出:
<?xml version="1.0"?>
<recipients>
<gsm messageId="1">aaa</gsm>
<gsm messageId="2">bbb</gsm>
</recipients>
aaa
bbb
已解决
在尝试其他一些建议之前,我自己设法解决了这个问题,并认为无论如何我都应该在这里发布修复程序
我让收件人
实现列表
。完成:)
公共类收件人:列表
{
私有列表gsms{get;set;}
公众受助人()
{
gsms=新列表();
}
公共IEnumerator GetEnumerator()
{
返回gsms.GetEnumerator();
}
}
公共类gsm
{
[XmlText]
公共字符串编号{get;set;}
[XmlAttribute]
公共字符串messageId{get;set;}
}
已解决
在尝试其他一些建议之前,我自己设法解决了这个问题,并认为无论如何我都应该在这里发布修复程序
我让收件人
实现列表
。完成:)
公共类收件人:列表
{
私有列表gsms{get;set;}
公众受助人()
{
gsms=新列表();
}
公共IEnumerator GetEnumerator()
{
返回gsms.GetEnumerator();
}
}
公共类gsm
{
[XmlText]
公共字符串编号{get;set;}
[XmlAttribute]
公共字符串messageId{get;set;}
}
您的xml文件现在的结构如何?我现在将用我的当前结果更新问题。您的xml文件现在的结构如何?我现在将用我的当前结果更新问题。对不起,我是新来的。代码块的某些部分(类名声明行)呈现为简单文本抱歉,我是新来的。代码块的某些部分(类名声明行)被呈现为简单文本。在修复我的解决方案(如上所述)之前,我没有机会对此进行测试-这是一个很好的简单方法,可以在将来修复它,所以无论如何,谢谢