【问题标题】:XmlSerialization problems on compact framework 3.5紧凑框架 3.5 上的 XmlSerialization 问题
【发布时间】:2009-08-29 21:41:22
【问题描述】:

我正在做一个手指练习,并尝试编写一个应用程序,让我的电脑和 Windows 手机通过蓝牙槽串行端口进行通信。

现在我遇到了对象序列化的障碍。 .Net Compact Framework 不支持二进制序列化,所以我选择 XmlSerialization。我写了一个有两个类的库。一个应该能够包含其他类的 ObjectCarrier,这样我就可以有一种通用的发送和接收方式。并有一个服装类 MusicAlbum。

整个设置在 pc 端完美运行。移动网站不断给我以下错误: System.InvalidOperationException:生成 XML 文档时出错。 ---> System.InvalidOperationException:类型 TransferObject.MusicAlbum 不是预期的。使用 XmlInclude 或 SoapInclude 属性指定静态未知的类型。

奇怪的是,如果我使用 ObjectCarrier 并将字符串或日期时间对象之类的东西放在 Payload 中,它可以在移动设备上运行。

我的 MusicAlbum 课程做错了什么?

---| MusicListing.cs |-------------

using System;
using System.Collections.Generic;
using System.Text;

namespace TransferObject
{
    public class MusicAlbum
    {
        public string AlbumName { get; set; }
        public string ArtistName { get; set; }
    }

}

---| TransferObject.cs |-----------

using System;
using System.Xml.Serialization;

namespace TransferObject
{
    [XmlInclude(typeof(MusicAlbum))]
    public class ObjectCarrier
    {
        public Object PayloadObject { get; set; }
    }

}

感谢您的建议。这帮助我了解我是如何做到的。通过使用抽象类,我不再需要载体了。

它不起作用的原因是我自己的错,它是 Windows 库而不是移动库。更改后,您的代码运行良好。据我现在测试的双方。如果有任何变化,我会更新这个。

【问题讨论】:

    标签: c# serialization compact-framework xml-serialization


    【解决方案1】:

    据我了解,XmlInclude 用于子类;即如果MusicAlbum 继承自ObjectCarrier,并且您将MusicAlbum 实例序列化为ObjectCarrier。

    IMO,这里最好的方法是使用每种类型的消息;但是,如果您想使用 [XmlInclude] 路由,您可以为所有支持的有效负载定义一个通用基类,例如:

    [XmlInclude(typeof(MusicAlbum))] // etc other types...
    public abstract class PayloadBase {}
    
    public class MusicAlbum : PayloadBase
    {
        public string AlbumName { get; set; }
        public string ArtistName { get; set; }
    }
    
    public class ObjectCarrier
    {
        public PayloadBase PayloadObject { get; set; }
    }
    

    顺便说一句,CF 上有一些支持二进制的 API; protobuf-net 只是其中之一(作为作者,我有偏见 - 但嘿,它是免费的......)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 2020-07-24
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多