【发布时间】:2009-09-17 16:43:51
【问题描述】:
我有一个 Web 服务将一个类(类来自 Web 服务)序列化为一个 MSMQ,然后一个 Windows 服务正在检查队列并反序列化。 Windows 服务有一个 Web 引用来获取该类。
如果我在 Web 服务内部反序列化,一切都会正常。但是,当我从 Windows 服务反序列化时,一切正常,除了两个作为 null 的字符串数组,所以我相信某些内容没有通过 Web 引用正确传输。
这是来自相关课程的 sn-p:
[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;
}
}
}
我在 Windows 服务中获得的 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="asdf@asdf.com" 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 之外的所有内容都可以在 Windows 服务中正常运行。 Web 服务,一切正常。
【问题讨论】:
-
建议:删除
[Serializable]属性,因为 XML 序列化不使用它。然后,序列化成一个文件,然后发布文件,这样我们就可以看到 XML 的格式了。 -
另一个建议:DRY——在你的项目中使用相同的类库进行序列化/反序列化。
标签: c# xml web-services serialization xml-serialization