【问题标题】:How to serialize/deserialize generated WCF proxy code?如何序列化/反序列化生成的 WCF 代理代码?
【发布时间】:2010-09-08 17:09:38
【问题描述】:

我正在尝试序列化/反序列化从 svcutil 生成的 WCF Web 服务代理代码。虽然我能够序列化对象,但我无法将它们反序列化回对象。这是我通过序列化生成的 XML:

<RootObject xmlns="http://schemas.myco.com/online/sync/2008/11">
    <WrapperObject>
        <Objects>
            <SomeObject p4:type="Foo" ContextId="d5f9f021-b2a1-47ba-9f25-1e068194dc87" ObjectId="fad3ef87-3944-459d-b45b-1e4e52ef24db" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.myco.com/online/sync/2008/11" />
        </Objects>
      </WrapperObject>
</RootObject>

我有几个问题:

  1. 我已经在使用 XmlSerializerNamespaces 来声明命名空间以匹配生成的代理代码中指定的命名空间。怎么还有一个“p4”标签,它添加到“SomeObject”标签中,并添加了一个新的 xml 命名空间(xmlns:p4="http://www.w3.org/2001/XMLSchema-instance")。

        using (XmlWriter xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings))
        {
            XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
            namespaces.Add(string.Empty, defaultNamespace);
    
            XmlSerializer serializer = new XmlSerializer(typeof(T), defaultNamespace);
            serializer.Serialize(xmlWriter, objectToBeSerialized, namespaces);
    
            return stringBuilder.ToString();
        }
    
  2. 当我尝试使用以下代码反序列化 XML 时,我收到以下错误:“System.InvalidOperationException: 生成 XML 文档时出错。---> System.Xml.XmlException: 'p4:type'是重复的属性名称。”

        using (TextReader textReader = new StringReader(xmlString))
        {
            using (XmlReader xmlReader = XmlReader.Create(textReader))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(T), defaultNamespace);
                return (T)serializer.Deserialize(xmlReader);
            }
        }
    
  3. 代理代码由 svcutil 生成,用于与 WCF Web 服务进行通信。当我只使用 Web 服务调用时,所有生成的对象都被正确序列化/反序列化。

以前有没有人遇到过类似的问题?

【问题讨论】:

    标签: c# .net xml-serialization


    【解决方案1】:

    WCF 使用专门的 XML 序列化器来序列化对象,这些对象将生成不同于标准 XmlSerializer 的 XML。您可以使用 XmlSerializer,但您必须为 objectToBeSerialized 对象正确分配您的类。改用 WCF 序列化程序可能会更好。

    看看这篇文章:

    http://msdn.microsoft.com/en-us/magazine/cc163569.aspx

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2012-02-12
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2011-03-19
    相关资源
    最近更新 更多