【发布时间】:2011-08-29 14:51:41
【问题描述】:
我有一个定义如下的类(使用 xsd 生成):
[GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[SerializableAttribute]
[DebuggerStepThroughAttribute]
[DesignerCategoryAttribute("code")]
[XmlTypeAttribute(AnonymousType = true)]
[XmlRootAttribute(IsNullable = false)]
public class DataRequest
{
private string _serviceField;
private string _subscriptionField;
public string Service
{
get
{
return _serviceField;
}
set
{
_serviceField = value;
}
}
[XmlElement("Subscription"), DefaultValue(null)]
public string Subscription
{
get
{
return _subscriptionField;
}
set
{
_subscriptionField = value;
}
}
}
然后,我定义了一个上述类的数组:
DataRequest[] requests = new DataRequest[2];
requests[0] = new DataRequest();
requests[1] = new DataRequest();
...
我想序列化这个数组并得到以下结果:
<SOAP-ENV:Body>
<DataRequest>
<Service>ServiceA</DataService>
<Subscription />
</DataRequest>
<DataRequest>
<Service>ServiceB</DataService>
<Subscription />
</DataRequest>
</SOAP-ENV:Body>
但是,当我调用以下命令时,输入是数组:
XmlSerializer serializer = new XmlSerializer(typeof(input));
serializer.Serialize(writer, input);
我得到以下信息:
<Soap-ENV:Body>
<ArrayOfDataRequest>
<DataRequest>
<Service>ServiceA</DataService>
<Subscription />
</DataRequest>
<DataRequest>
<Service>ServiceB</DataService>
<Subscription />
</DataRequest>
</ArrayOfDataRequest>
</Soap-ENV:Body>
有什么方法可以摆脱 ArrayOfDataRequest 元素,而直接序列化实际的数组元素?
【问题讨论】:
-
嘿,Ben,我刚试了一下,得到了同样的结果 (ArrayOfDataRequest)。
-
我对使用 xsd.exe 工具生成的复杂类做同样的事情。我发现序列化时最好的选择是使用 List
,然后使用 List.ToArray();命令将列表转换为数组。这避免了必须指定要序列化的数组的大小。您还可以使用 XmlWriterSettings XmlSettings = new XmlWriterSettings();然后XmlSettings.指定选项。
标签: c# .net xml xml-serialization