【问题标题】:xml deserialization <string> tagxml反序列化<string>标签
【发布时间】:2016-07-04 22:11:59
【问题描述】:

我使用 System.ServiceModel System.ServiceModel.Web System.ServiceModel.Activation 命名空间编写了 Web 服务。

[XmlSerializerFormat]
        [OperationContract]
        [WebGet(UriTemplate = Routing.GetClientRoute, BodyStyle = WebMessageBodyStyle.Bare)]
        string GetClientNameById(string Id);           

我用这个类描述了数据:

[XmlRoot("ServiceXmlReply")]
    public class ServiceXmlReply
    {
        [XmlElement]
        public string Name;
    }

问题在于响应,我从服务中收到。它看起来像这样:

"<?xml version=\"1.0\" encoding=\"utf-8\"?>
<string>
<ServiceXmlReply xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
<Name>Igor<Name>
<ServiceXmlReply>
</string>"

你可以看到不应该是“字符串”标签,但它是。因此,我无法反序列化响应并获取数据。

服务器端和客户端的类相同。

【问题讨论】:

    标签: c# xml deserialization


    【解决方案1】:

    您的操作合约定义 GetClientNameById 的响应是字符串类型。那么会发生什么,您的返回类型字符串的内容是一个序列化的 xml。

    要使其正常工作,您应该:

    1. 将操作的返回类型更改为 ServiceXmlReply 或
    2. 放弃使用ServiceXmlReply。在服务和客户端使用字符串。

    【讨论】:

    • 非常感谢您的回复。问题是该方法将类的 XML 代码作为字符串返回。我不能把它转换成我的类型。问题在于我的想法是额外的序列化。有谁知道如何关闭它?
    • 我又想了一遍,找到了解决办法。你完全正确。我刚刚改变了我的班级,所以它返回了我的整个班级,而不是 xml 文档。它自己创建了正确的 xml。我现在很高兴。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多