【问题标题】:Skipping an Element when serializing a "MessageBodyMember" property序列化“MessageBodyMember”属性时跳过元素
【发布时间】:2011-08-10 12:19:10
【问题描述】:

每当标记有 MessageContract 属性的类的对象被序列化时,我看到它会查找 [MessageBodyMember] 成员并将它们序列化到消息中单独的 XML 元素下。有没有办法直接序列化它们,跳过包装节点?

例如。

[System.ServiceModel.MessageContractAttribute(IsWrapped = false)]
Class A
{
        [MessageBodyMember]
        public string MyMessage
        {
            get;
            set;
        }
}

当它被序列化时,它变成了

<Body>
<MyMessage>....</MyMessage>
</Body>

但我希望它变成

<Body>
....
</Body>

我知道这可能不合逻辑。有什么建议吗?

【问题讨论】:

  • 你能澄清你想要什么(即用一些例子替换 ...)吗?例如,您是否希望消息看起来像这样 Some string

标签: c# wcf web-services soap xml-serialization


【解决方案1】:

应该这样做:-

[MessageBodyMember(Name="Body")]

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您希望删除 &lt;MyMessage&gt; 元素并将字符串本身放在消息正文中。好吧,消息合同对你不起作用。您可以删除消息合同的外包装,但不能删除单个成员的包装。

    您可以做的是基于您创建的BodyWriter 实例创建一个Message 对象,并且此正文编写器可以以它想要的任何形式编写输出XML。请参阅下面的代码以获取示例。

    public class StackOverflow_7010654
    {
        [MessageContract(IsWrapped = false)]
        public class MyMC
        {
            [MessageBodyMember]
            public string MyMessage { get; set; }
        }
        public static void Test()
        {
            TypedMessageConverter tmc = TypedMessageConverter.Create(typeof(MyMC), "Action");
            Message msg = tmc.ToMessage(new MyMC { MyMessage = "some string" }, MessageVersion.Soap11);
            Console.WriteLine(msg); // message with the <MyMessage> element
    
            Console.WriteLine();
    
            msg = Message.CreateMessage(MessageVersion.Soap11, "Action", new MyBodyWriter());
            Console.WriteLine(msg); // message without the <MyMessage> element
        }
        public class MyBodyWriter : BodyWriter
        {
            public MyBodyWriter() : base(true) { }
    
            protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
            {
                writer.WriteString("some string");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多