C#对具有命名空间的Web服务(BizTalk发布的架构)进行序列化/反序列化

C#对具有命名空间的Web服务(BizTalk发布的架构)进行序列化/反序列化,c#,.net,serialization,deserialization,biztalk-2013,C#,.net,Serialization,Deserialization,Biztalk 2013,我有一个C#控制台程序,其中包含对BizTalk发布模式的Web服务引用。这是一个庞大的beasty程序,我正在尝试创建一个小的测试工具来检索XML文件并发布它,但要确保它符合要求 当我在内存中构建一个对象并序列化它时,它如下所示: <?xml version="1.0" encoding="utf-8"?> <Outbound210 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://

我有一个C#控制台程序,其中包含对BizTalk发布模式的Web服务引用。这是一个庞大的beasty程序,我正在尝试创建一个小的测试工具来检索XML文件并发布它,但要确保它符合要求

当我在内存中构建一个对象并序列化它时,它如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Outbound210 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Transaction xmlns="http://ABC.Integrations/" />
</Outbound210>

有趣的是,当我将名称空间放在根上而不是根上时,它会序列化,然后通过BizTalk提交给Web服务和进程,然后在根上显示名称空间(在消息跟踪中)。我的期望是,我应该能够使用根上的名称空间而不是第二个元素序列化BizTalk中看到的完全相同的文件

尝试将名称空间应用于根目录意味着您发送的文档与服务期望的不同。您不应该关心服务如何定义其名称空间——您只需要匹配它所说的需要。如果使用BizTalk WSDL添加服务引用,则VS生成的类应允许您与web服务通信;在BizTalk中,根具有名称空间,而上面生成的C#似乎也具有名称空间。但是,当我在序列化时指定它时,它会爆炸(如上所述),当我反序列化时,它就会丢失。
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://ABC.Integrations/")]
public partial class Outbound210 : object, System.ComponentModel.INotifyPropertyChanged {

    private Outbound210Transaction transactionField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public Outbound210Transaction Transaction {
        get {
            return this.transactionField;
        }
        set {
            this.transactionField = value;
            this.RaisePropertyChanged("Transaction");
        }
    }

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://ABC.Integrations/")]
public partial class Outbound210Transaction : object, System.ComponentModel.INotifyPropertyChanged {
    etc...
Outbound210 outbound210 = new Outbound210();
Outbound210Transaction outbound210Trans = new Outbound210Transaction();
outbound210.Transaction = outbound210Trans; 

XmlSerializer xs1 = new XmlSerializer(typeof(Outbound210));
StreamWriter sw1 = new StreamWriter(@"d:\SVN\Demo\Verify.xml");
xs1.Serialize(sw1, outbound210);
sw1.Close();