【问题标题】:Trouble with deserialization in mono单声道反序列化问题
【发布时间】:2010-02-22 03:52:18
【问题描述】:

任何人都知道为什么以下由 C# 中的数据合约序列化程序生成的 XML 在 Windows 中可以正常工作,但在 Mono 上的 Linux 下却不行?

XML:

<Message i:type="UserMessage" xmlns="http://schemas.datacontract.org/2004/07/NetTunnel"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><type>UserMessage</type>
<nick>Unnamed</nick><services><Service><enabled>true</enabled><port_ranges i:nil="true"/>
<service_name>vent</service_name></Service></services><state>Created</state>
<userid>1</userid></Message>

错误:

Unhandled Exception: System.Runtime.Serialization.SerializationException: Deserializing 
type 'System.Object'. Expecting state 'EndElement'. Encountered state 'Element' with 
name 'enabled' with namespace 'http://schemas.datacontract.org/2004/07/NetTunnel'.

如果没有列出服务(xml 标签&lt;services/&gt;),它也会给我一个错误。 services 变量的类型为List&lt;Service&gt;。这只是 Mono 无法处理的类型吗?其他类型会更合适吗?还是完全是另外一回事?

【问题讨论】:

  • 出于好奇 - 您打算使用 WCF 吗?还是只是为了分享数据?如果是后者,我可以推荐一些跨平台的替代序列化程序(开源,因此每个平台上的源代码相同)。
  • 不需要使用WCF,只需要共享数据。我很想听听替代序列化程序。希望它们与注释一样易于使用?

标签: c# mono datacontractserializer


【解决方案1】:

不是您想要的答案,而是:Mono 上与 .Net 不同的每个行为都是我所知道的 Mono 中的一个 错误。请(!)file it,特别是如果它真的那么小且易于复制。在这里讨论它可能会有所帮助,但下一个人可能会遇到同样的问题,需要研究问题等等。

只需file it,Mono 的人都很棒,而且会更有帮助。为了帮助其他人进行搜索:我建议您使用该问题的链接更新您的帖子。

关于您的最后一个问题:您不应该仅仅因为 Mono 可能需要反序列化它而更改类型 - List 就可以了。

【讨论】:

    【解决方案2】:

    在 cmets 中,您不需要 WCF,只想共享数据。在这种情况下,我会查看protobuf-net。我很有偏见(因为我是作者),但它是免费的(有源代码),所以我不推荐它从自我获取。简单地;它是一个快速、可移植的序列化 API,以 google 的“protocol buffers”数据格式为蓝本。处理速度非常快(例如,通常比 xml 快得多)并且在线上非常小。

    如果您已经在使用数据合同,您可以通过添加唯一的 Order 值(它使用它作为数字标识符)来调整它们:

    [DataContract]
    public class Foo {
        [DataMember(Order = 1)]
        public int Id {get;set;}
    
        [DataMember(Order = 2)]
        public string Name {get;set;}
    }
    

    (或者你可以使用特定的protobuf-net属性)

    完整的源代码可用,它适用于 Mono、常规 .NET、CF 等。

    【讨论】:

      【解决方案3】:

      在此处提交错误报告:https://bugzilla.novell.com/show_bug.cgi?id=581611

      不过,在这个问题得到解决之前,如果能知道任何替代方案,那就太好了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 1970-01-01
        相关资源
        最近更新 更多