2017-01-20 12 views
0

1つのC#ソリューションからオブジェクトをシリアル化し、それを永続化して別のソリューションでピックアップしてから、異なる解決策。別のソリューション間で共通のオブジェクトを共有する方法

永続化された場所にオブジェクトを転送するとき、オリジナルの名前空間を持つオブジェクト型も保持されます。これは明らかに、共有共通オブジェクトの名前空間が、再共有/クラスは同じプロパティと同じ名前で同じですが、異なるソリューションです。

共有クラス、共通クラス参照クラス、および/またはリンククラスは、私が間違っていない限り解決策ではないようです。なぜなら、バックアップを選択すると、異なるソリューションからのものであるため、別のタイプだと思ってデシリアライズしようとするとエラーが発生します。

理由 - それを元のオブジェクト型に直接デシリアライズすることはできますが、別のプロジェクトのソリューションには可能です。

洞察力やアドバイスはありがとうございます。ありがとう

環境:Visual Studioの2015、.NETのコア、C#(コンソールアプリケーションでのテスト)

答えて

2

クラスライブラリを作成してプロジェクト間で共有することもできますし、オブジェクトをJSONにシリアル化して、両側に同等のクラスを設定することもできます。

あなたはシリアライズにどのメカニズムを使用しているのかは言及していませんが、使用しているバイナリシリアライズであると仮定しています。バイナリの直列化が必要な場合は、共有されているクラスライブラリが最適です。

+0

Iは、Newtonsoft.JsonConvertを<>()を利用し、その後、メソッドへのオブジェクトの種類を指定していますし、通過直列化された文字列データをメソッドに渡します。しかし、別のソリューションから入ってくるので、元のオブジェクトとは異なる名前空間を持っています。 – CodingRiot

+0

JsonConvertは名前空間を保存しません。指定しているオブジェクトタイプは、逆シリアル化と同じソリューションの型ですか? – MikeS

+0

@CodingRiot Json.Netには、設定で 'TypeNameHandling'の値を指定しない限り、デフォルトで名前空間は含まれません。どのような価値がありますか? – stuartd

1

プロジェクト(.Net Core用)Class Libraryを作成します。プロジェクト間でやりとりしたいクラス(または、共有したいものなど)を作成します。

次に、そのクラスを必要とするすべてのプロジェクトでそのライブラリへの参照を追加します。ライブラリnamespaceでusingディレクティブを追加し、これらのクラスを使用できます。

1

クラスを共有したくない場合や、別のオプションが必要な場合は、元のタイプを気にせず、データとの互換性のためにSerializatoin/Deserializationメカニズムを使用できます。デフォルトではJson.Netと同じです。

シリアライズ1つの溶液中:他の溶液中

var jsonSerializedString = JsonConvert.SerializeObject(myObjectInAssemblyA); 

デシリアライズ:

objectInAssemblyB = JsonConvert.DeserializeObject<ObjectClassName>(jsonSerializedString); 
+0

@CodingRiotクラスが異なるソリューション/アセンブリに存在するかどうか、またはそれらの名前が異なるかどうかは関係ありません。重要なのは、プロパティの名前、型、アクセス修飾子です。彼らは同じである必要があります。 コンストラクタも問題になる場合があります(デフォルトでは複数あります)。これもJson.Netで解くことができます。 – m1o2

+0

申し訳ありませんが、私はジェネリックスを通してそれらをジェネリック型で直接型に渡して使用しようとしていることを言及しておきますが、それらは異なるソリューションであるため、Newtonsoft Jsonソリューションを使用して変換しないと、私はNewtonsoft Jsonソリューションを使用して回避策を講じなければなりませんでしたが、できる限りNewtonsoftを使用してそれらを変換することなく、ソリューション間でオブジェクトを渡したいと思います – CodingRiot

関連する問題