2009-08-29 9 views
1

私は指の練習をしており、コンピュータとWindowsの携帯電話がBluetoothトラフのシリアルポートを介して通信できるアプリケーションを作成しようとしています。コンパクトなフレームワークでのXmlSerializationの問題3.5

私はオブジェクトのシリアライズに悩まされました。バイナリのSeralizationは.Net Compact Frameworkではサポートされていませんので、XmlSerializationを選択しています。私は2つのクラスのライブラリを書いています。私は送受信の一般的な方法を持つことができるように、他のクラスを含むことができるはずのObjectCarrier。そして、衣装クラスMusicAlbumを持っています。

設定全体がPC側で完全に機能します。モバイルサイトでは、次のエラーが表示され続けます。 System.InvalidOperationException:XMLドキュメントの生成中にエラーが発生しました。 ---> System.InvalidOperationException:TransferObject.MusicAlbumタイプが期待されていませんでした。静的に知られていない型を指定するには、XmlIncludeまたはSoapInclude属性を使用します。

奇妙なことは、ObjectCarrierを使用して文字列やdatetimeオブジェクトのようなものをペイロードに配置すると、モバイル上で動作するということです。

私は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; } 
    } 

} 

あなたsuggetionいただきありがとうございます。これは、私がそれをどうやって行っているかを啓示するのに役立ちました。抽象クラスを使用することで、私はもはやキャリアを必要としません。

私はそれがモバイルライブラリではなくWindowsライブラリであるという自分の責任でした。コードを変更した後、コードは完全に機能しました。私が今試した限り、両側で。何か変わったら、これを更新します。

答えて

1

私が理解する限り、サブクラスにはXmlIncludeが使用されています。つまり、から継承されたMusicAlbumの場合、としてMusicAlbumインスタンスをシリアル化していた場合です。

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はちょうど1つです(私は著者として偏っていますが、ちょっと、無料です...)。

+0

+1 XMLを使ってプロトタイプを推薦する。 – ctacke

関連する問題