我有一个Web服务将序列化一个类(类是从Web服务)到MSMQ,然后一个Windows服务正在检查队列和反序列化。 Windows服务有一个Web引用来获得该类。从Web服务引用的C#类不正确反序列化
如果我反序列化Web服务内部,一切都很好。然而,当我从Windows服务反序列化时,除了两个字符串数组以外,所有工作都是空的,所以我相信某些东西不能通过Web引用正确传输。
下面是该类问题的一个片段:
[Serializable, XmlInclude(typeof(EmailType))]
public partial class Email
{
[System.Xml.Serialization.XmlElement("BodyParameters")]
public string[] BodyParameters
{
get
{
return this.bodyParameters;
}
set
{
this.bodyParameters = value;
}
}
[System.Xml.Serialization.XmlElement("SubjectParameters")]
public string[] SubjectParameters
{
get
{
return this.subjectParameters;
}
set
{
this.subjectParameters = value;
}
}
}
的Reference.cs文件我在窗口服务中获得如下:
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("BodyParameters")]
public string[] BodyParameters {
get {
return this.bodyParametersField;
}
set {
this.bodyParametersField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("SubjectParameters")]
public string[] SubjectParameters {
get {
return this.subjectParametersField;
}
set {
this.subjectParametersField = value;
}
}
有我有一些特殊的方法引用类或在类中设置字符串[]以便它被正确地引用?
这里的输出我得到的,如果我序列化到一个文件:
<?xml version="1.0" encoding="utf-8"?>
<Email xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" MessageType="None" PackageID="0" To="[email protected]" Subject="testing..." Body="this is a test" IsHTML="false">
<BodyParameters>one two</BodyParameters>
<BodyParameters>three four</BodyParameters>
<BodyParameters>test test</BodyParameters>
<SubjectParameters>foo</SubjectParameters>
</Email>
请记住,除了BodyParameters和SubjectParameters一切都在窗口服务出精品。 Web服务,一切正常。
建议:删除'[Serializable接口]'属性,因为它不使用XML序列化。然后,序列化到一个文件,并发布文件,以便我们可以看到XML的格式。 – 2009-09-17 17:00:52
另一个建议:干 - 在项目中使用相同的类库进行序列化/反序列化。 – jro 2009-09-18 01:29:58