我在序列化通过XML服务引用添加到项目中的对象时遇到问题。
通过服务引用引用的对象具有以下结构:
public class GetProspectsContactStatusParametersV1
{
public GetProspectsContactStatusParametersV1()
{
Version = 1;
}
public int Version { get; set; }
public ProspectIds ProspectIDs { get; set; }
public InterestIds InterestIDs { get; set; }
public class ProspectIds
{
private List<int> _prospectIds = new List<int>();
[XmlElement("ProspectId")]
public List<int> Items
{
get { return _prospectIds; }
set { _prospectIds = value; }
}
}
public class InterestIds
{
private List<int> _interestIds = new List<int>();
[XmlElement("InterestId")]
public List<int> Items
{
get { return _interestIds; }
set { _interestIds = value; }
}
}
}
此代码构成了我在另一个应用程序中引用的Web Service项目的一部分。使用其他项目中的引用,我创建了上述对象的实例,如下所示:
var request = new ProspectsWebServiceMetadata.GetProspectsContactStatusParametersV1();
request.Version = 1;
request.InterestIDs = new ProspectsWebServiceMetadata.InterestIds
{
2,3,4,5
};
然后我尝试使用基本的XmlSerializer将此对象序列化为XML:
public static string ToXmlString(object source)
{
using (StringWriter sww = new StringWriter())
using (XmlWriter writer = XmlWriter.Create(sww))
{
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(source.GetType());
ser.Serialize(writer, source);
return sww.ToString();
}
}
创建的XML如下:
<?xml version="1.0" encoding="utf-16"?>
<GetProspectsContactStatusParametersV1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Version>1</Version>
<InterestIDs>
<int>2</int>
<int>3</int>
<int>4</int>
<int>5</int>
</InterestIDs>
“InterestIDs”中的上述XML部分应该具有“InterestID”而不是“int”。
作为导入引用的一部分生成的代码似乎表明它应该正确序列化,但显然它不会:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.CollectionDataContractAttribute(Name="InterestIds", Namespace="http://www.testing.com/", ItemName="InterestId")]
[System.SerializableAttribute()]
public class InterestIds : System.Collections.Generic.List<int> {
}
有什么想法吗?
答案 0 :(得分:0)
CollectionDataContractAttribute
的最终代码段中的属性实际上是标记DataContractSerializer
的数据,而不是XmlSerializer
。