1

WCFでSilverlightを使用しています。サーバーに送信したいかなり複雑なオブジェクトがあります。このオブジェクトは複数のサービス間で共有されるため、データコントラクトにすることはできません。自分でシリアル化する簡単な方法があるのではないかと思います。.Net 4(サーバー側)とSilverlight 4(クライアント側)の両方で機能する方法。

注意してください、私はRIAサービスを使用していません。なぜなら、RIAサービスは、使用を開始して以来、私の側に大きな苦痛を与えてきたからです。

編集:

私はとを使用しようとしましたがDataContractAttributeDataMemberAttribute役に立ちませんでした。サービスから次の例外が発生します。

System.IO.FileNotFoundException:ファイルまたはアセンブリ'System.Runtime.Serialization、Version = 2.0.5.0、Culture = neutral、PublicKeyToken=7cec85d7bea7798e'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名:'System.Runtime.Serialization、Version = 2.0.5.0、Culture = neutral、PublicKeyToken = 7cec85d7bea7798e'

その理由は明らかなようです。POCOを含むDLLがSilverlightクラスライブラリであるためだと思います。これは、WCFサービスとSilverlightクライアントの両方の間でオブジェクトを共有することを私が知っている唯一の方法です。問題は、Silverlight DLLがSilverlightバージョンを使用しているSystem.Runtime.Serializationため、POCOをSilverlight以外の環境で使用できないことです。このPOCOを複数のサービス間で共有する必要があるため、別のアセンブリに存在する必要があります。

これが、オブジェクトのシリアル化方法を制御したい理由です。オブジェクト自体の内部でそれらをシリアル化します。

4

2 に答える 2

2

Json.NETをお勧めします。.NetとSilverlightをサポートするNuGetパッケージをダウンロードできます。

シリアライズ:

string json = JsonConvert.SerializeObject(myObj);

デシリアライズ:

var myObj = JsonConvert.DeserializeObject<MyObject>(json);
于 2012-05-23T18:23:59.990 に答える
1

DataContractSerializer、Silverlightと.NET4.0の両方でPOCOタイプをサポートします。あなたはそれを試すことができ、それはうまくいくはずです。

編集後の更新:.NET FrameworkからSilverlight用に構築されたライブラリを参照することはできません。それらは、異なるアセンブリを参照します。いくつかのオプションがあります。

  • 2つのクラスライブラリプロジェクトを作成します。1つはSL用で、もう1つは完全なフレームワーク用です。プロジェクトの1つにファイルを追加し、もう1つにはそれらへのリンクを追加するだけです。これは私が何度も行ったことがあり、正常に機能します。
  • ポータブルライブラリ(PL)アセンブリを作成します。私はそれを試していませんが、それがまさにPLの目標です-異なる.NETバージョン間でアセンブリを共有します。それが機能するかどうかを確認するためにそれを試すことができます。
于 2012-05-23T16:20:56.950 に答える