C# compact framework 3.5上的XML序列化问题

C# compact framework 3.5上的XML序列化问题,c#,serialization,compact-framework,xml-serialization,C#,Serialization,Compact Framework,Xml Serialization,我正在做手指练习,并试图编写一个应用程序,让我的电脑和windows mobile phone通过蓝牙串行端口进行通信 现在我遇到了对象序列化的障碍。Net Compact Framework不支持二进制序列化,因此我选择XmlSerialization。我写了一个有两门课的图书馆。一个ObjectCarrier,应该能够包含其他类,这样我就可以有一个通用的发送和接收方式。还有一个服装班的音乐班 整个设置在pc端可以完美运行。移动站点不断给我以下错误: System.InvalidOperati

我正在做手指练习,并试图编写一个应用程序,让我的电脑和windows mobile phone通过蓝牙串行端口进行通信

现在我遇到了对象序列化的障碍。Net Compact Framework不支持二进制序列化,因此我选择XmlSerialization。我写了一个有两门课的图书馆。一个ObjectCarrier,应该能够包含其他类,这样我就可以有一个通用的发送和接收方式。还有一个服装班的音乐班

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

奇怪的是,如果我使用ObjectCarrier并在有效负载中放入字符串或datetime对象之类的东西,它就会在移动设备上工作

我的音乐班出了什么问题

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

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


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


它不工作的原因是我自己的错,它是一个windows库而不是一个移动库。更改后,您的代码工作得非常好。就我现在测试的两个方面而言。如果有任何变化,我会更新它。

据我所知,
xmlclude
用于子类;i、 e.如果
MusicAlbum
继承自
ObjectCarrier
,并且您正在将
MusicAlbum
实例序列化为
ObjectCarrier

在国际海事组织,这里最好的方法是使用每种类型的消息;但是,如果您想走
[xmlclude]
路线,您可以为所有受支持的有效负载定义一个公共基类,例如:

[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; }
}

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

据我所知,
xmlclude
用于子类;i、 e.如果
MusicAlbum
继承自
ObjectCarrier
,并且您正在将
MusicAlbum
实例序列化为
ObjectCarrier

在国际海事组织,这里最好的方法是使用每种类型的消息;但是,如果您想走
[xmlclude]
路线,您可以为所有受支持的有效负载定义一个公共基类,例如:

[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; }
}
顺便说一句,有些API在CF上支持二进制;protobuf网只是其中之一(我作为作者有偏见——但嘿,它是免费的…)

[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; }
}