C# 类未按预期序列化
我一整天都在为这件事挣扎。我做了很多研究,但我似乎不能把它们全部放在一起 我有一个来自服务器的XML响应,如下所示:C# 类未按预期序列化,c#,serialization,C#,Serialization,我一整天都在为这件事挣扎。我做了很多研究,但我似乎不能把它们全部放在一起 我有一个来自服务器的XML响应,如下所示: <?xml version="1.0" ?> <inboxRecords> <inboxRecord> <field1 /> <field2 /> <field3 /> </inboxRecord> <inboxReco
<?xml version="1.0" ?>
<inboxRecords>
<inboxRecord>
<field1 />
<field2 />
<field3 />
</inboxRecord>
<inboxRecord>
<field1 />
<field2 />
<field3 />
</inboxRecord>
</inboxRecords>
上面的课程是基于我在网上找到的众多例子中的一个。问题是,当我序列化上面的类(以确认其正确性)时,结果如下:
<?xml version="1.0" encoding="utf-16"?>
<inboxRecords>
<InboxRecords>
<InboxRecord>
<field1>some value</field1>
</InboxRecord>
<InboxRecord>
<field1>some value</field1>
</InboxRecord>
</InboxRecords>
</inboxRecords>
[XmlRoot("inboxRecords")]
public sealed class QueueQueryResult : Collection<QueueQueryResult.InboxRecord>
{
public QueueQueryResult()
{
InboxRecords = null;
}
public sealed class InboxRecord
{
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }
}
}
一些价值
一些价值
那么,第一个问题,我如何去掉额外的InboxRecords元素?我只想让词根这么说(用一个小的“I”)。其次,为了快速测试,我只在第一个字段中输入一个值。为什么其他字段没有显示为空元素?我需要另一个装饰师吗
谢谢!
谢谢 使用
xmlement
属性:
[XmlRoot("inboxRecords")]
public sealed class QueueQueryResult
{
[XmlElement("inboxRecord")]
public InboxRecord[] InboxRecords;
public QueueQueryResult()
{
InboxRecords = null;
}
public sealed class InboxRecord
{
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }
}
}
这将删除数组包装器元素,并允许您控制每个xml元素的名称,以便可以使用小写名称。使用
XmlElement
属性:
[XmlRoot("inboxRecords")]
public sealed class QueueQueryResult
{
[XmlElement("inboxRecord")]
public InboxRecord[] InboxRecords;
public QueueQueryResult()
{
InboxRecords = null;
}
public sealed class InboxRecord
{
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }
}
}
这将删除数组包装器元素,并允许您控制每个xml元素的名称,以便可以使用小写名称。未经测试,但我认为您可能可以这样做:
<?xml version="1.0" encoding="utf-16"?>
<inboxRecords>
<InboxRecords>
<InboxRecord>
<field1>some value</field1>
</InboxRecord>
<InboxRecord>
<field1>some value</field1>
</InboxRecord>
</InboxRecords>
</inboxRecords>
[XmlRoot("inboxRecords")]
public sealed class QueueQueryResult : Collection<QueueQueryResult.InboxRecord>
{
public QueueQueryResult()
{
InboxRecords = null;
}
public sealed class InboxRecord
{
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }
}
}
[XmlRoot(“收件箱记录”)]
公共密封类QueueQueryResult:集合
{
公共队列查询结果()
{
InboxRecords=null;
}
公开密封类收件箱记录
{
公共字符串字段1{get;set;}
公共字符串字段2{get;set;}
公共字符串字段3{get;set;}
}
}
代码的问题是,在序列化到
InboxRecords
的对象中有一个成员InboxRecords
。通过使类继承自集合
,您为它提供了处理一组InboxRecords
的能力,而无需额外的内部元素。未经测试,但我认为您可能可以这样做:
<?xml version="1.0" encoding="utf-16"?>
<inboxRecords>
<InboxRecords>
<InboxRecord>
<field1>some value</field1>
</InboxRecord>
<InboxRecord>
<field1>some value</field1>
</InboxRecord>
</InboxRecords>
</inboxRecords>
[XmlRoot("inboxRecords")]
public sealed class QueueQueryResult : Collection<QueueQueryResult.InboxRecord>
{
public QueueQueryResult()
{
InboxRecords = null;
}
public sealed class InboxRecord
{
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }
}
}
[XmlRoot(“收件箱记录”)]
公共密封类QueueQueryResult:集合
{
公共队列查询结果()
{
InboxRecords=null;
}
公开密封类收件箱记录
{
公共字符串字段1{get;set;}
公共字符串字段2{get;set;}
公共字符串字段3{get;set;}
}
}
代码的问题是,在序列化到
InboxRecords
的对象中有一个成员InboxRecords
。通过使类继承自集合
,您为它提供了处理一组InboxRecords
的能力,而无需额外的内部元素。使用XSD.exe从第一个示例XML(然后是a.cs)生成XSD后,我可以从第二个示例创建并序列化一个实例:
<?xml version="1.0" encoding="utf-16"?>
<inboxRecords xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<inboxRecord>
<field1>some value</field1>
</inboxRecord>
<inboxRecord>
<field1>some value</field1>
</inboxRecord>
</inboxRecords>
一些价值
一些价值
除了encoding属性和schema名称空间之外,这看起来与第一个示例非常相似。使用XSD.exe从第一个示例XML(然后是a.cs)生成XSD后,我可以从第二个示例创建并序列化一个实例:
<?xml version="1.0" encoding="utf-16"?>
<inboxRecords xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<inboxRecord>
<field1>some value</field1>
</inboxRecord>
<inboxRecord>
<field1>some value</field1>
</inboxRecord>
</inboxRecords>
一些价值
一些价值
除了encoding属性和schema名称空间之外,这看起来与第一个示例非常相似。您的嵌套类称为InboxRecord。。。这就是序列化程序将使用的。您是否尝试过使用xsd.exe
为您生成类?是的,它生成的类似乎与我已有的类没有太大的不同。我还没有将该类添加到我的项目中,但我会尝试一下。您的嵌套类称为InboxRecord。。。这就是序列化程序将使用的。您是否尝试过使用xsd.exe
为您生成类?是的,它生成的类似乎与我已有的类没有太大的不同。我还没有将该类添加到我的项目中,但我会尝试一下。成功了!谢谢我知道我很接近,就是这样!谢谢我知道我离你很近。实际上我也是按你的方式做的,而且效果很好。谢谢事实上,我也是按你的方式做的,而且效果很好。谢谢