2012-02-08 12 views
1

私は、.NETでデスクトップアプリケーションを開発しています。いくつかのデータをファイルに保存しておきたいのですが、新しいフィールドを追加するなど、保存しているデータを自由に変更することができます。DataContractsを使用するアプリケーションを設定するにはどうすればよいですか?

This answerは、BinaryFormatterの代わりにDataContractSerializerを使用することをお勧めします。

しかし、プロジェクトのクラスに[DataContract]属性を使用することはできません。 using System.Runtime.Serialization;の後も、未知のタイプについてはまだエラーが出ます。

プロジェクト目標の.NET Framework 4

私はデータコントラクトは、WCFフレームワークの一部であることを学んだ、私は何とかそれを使用する私のプロジェクトを設定する必要がありますと仮定します。どうやって?

+1

"未知の種類についてはまだエラーが発生します。" - あきらめてはいけない;エラーメッセージを調べたり、ここに投稿してください。 – Joe

+0

System.Runtime.Serialization.dllへの参照を追加しましたか? – Joulukuusi

+0

@ Joulukuusiそれは、感謝のように見えます!私はそれがすぐに動作するかどうかを確認しますが、IDEはそのタイプを見つけます。私は[Serializable]が同じ名前空間にあってもその参照を追加せずに働いたので驚いています。 – Kos

答えて

1

C#ネームスペースは、複数のアセンブリ間で共有できます。 [DataContract]属性を含むSystem.Runtime.Serialization.dllへの参照を追加する必要があります。

1

おそらくあなたはそれが

必要なときに知っタイプ属性を指定するために不足している以下の例を見てください:あなたはICustomerInfoのタイプを指定する必要が

public interface ICustomerInfo 
{ 
    string ReturnCustomerName(); 
} 

[DataContract(Name = "Customer")] 
public class CustomerTypeA : ICustomerInfo 
{ 
    public string ReturnCustomerName() 
    { 
     return "no name"; 
    } 
} 

[DataContract(Name = "Customer")] 
public class CustomerTypeB : ICustomerInfo 
{ 
    public string ReturnCustomerName() 
    { 
     return "no name"; 
    } 
} 

[DataContract] 
[KnownType(typeof(CustomerTypeB))] 
public class PurchaseOrder 
{ 
    [DataMember] 
    ICustomerInfo buyer; 

    [DataMember] 
    int amount; 
} 

それ以外のシリアル化エンジンはできませんタイプを推測してください

1

あなたのアプリケーションにwcfサービステンプレートを追加して、関数とデータメンバーとプロジェクト内の参照wcfを宣言してください。

関連する問題