2012-03-21 8 views
2

.NET 2.0からアップグレードされたばかりの.NET 4.0プロジェクトで一連のXMLファイルを逆シリアル化する必要があります。シリアライズ機能have changedがあるため、クラスが継承しているサードパーティのオブジェクトライブラリのプロパティの束に[XmlIgnore]とマークされていないため、デシリアライズが失敗するようになりました。.NET 4.0プロジェクトでSystem.Xml 2.0を使用できますか?

質問:リフレクションを使用して.NET 4.0プロジェクトのSystem.Xml.dll 2.0バージョンからDeserialize()関数を呼び出すことはできますか?

は私が試してみた:

Assembly.Load("System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089");

が、これはFileNotFoundExceptionをで失敗しました(それは右、GACを検索していますか?)あなたがすることはできません

+0

...デシリアライゼーションが失敗している理由を、私は実際にはそうではないという考えは非常に怖いです、それは後方互換性に期待していると思いますについてよろしいです、それは明らかに聞こえることができますが、サードパーティ製のライブラリのアップデートを入手できませんか? –

+0

私はできました、そしておそらく私が行く道でしょう。それはオープンソースです:http://www.lhotka.net/cslanet/ – Nilzor

+0

答えに基づいて、私はこれが最小の痛み量になると思います... –

答えて

1

- 私の知る限り。

プロジェクトのターゲットフレームワークを設定すると、そのフレームワークが設定されます。 System.Xml 2.0または4.0を取得します。

しかし、私は2.0と4.0間のシリアル化の違いについて混乱しています。確かに[XmlIgnore]は2.0にあったのですか?

+0

はい。しかし、.NET 4.0の逆シリアル化では例外がスローされます。 setメソッドを持たないプロパティは[XmlIgnore] – Nilzor

+0

でマークされていません。 –

+0

彼らは私のクラスが継承するサードパーティのライブラリに入っているからです。 – Nilzor

1

フレームワーク2をターゲットとするwee dllを作成してv2バージョンのクラスを返し、それからv4バージョンを移植することができます。あなたはどこかに旗を掲げています。

あなたは私が知っている

+0

はい、私は確信しています、そして私は恐ろしいことに同意します。このコードhttps://gist.github.com/2145953は、[XmlIgnore]でSomePropertyをマークしない限り、2.0ではなく4.0で渡されます。 InvalidOperationException - エラーCS0200:プロパティまたはインデクサー(...)を割り当てることができません - 読み込み専用です – Nilzor

+0

私はあなたの2番目のアセンブリアプローチを試してみます...値打ち – Nilzor

+1

http://social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/3dffcfdc-e857-4f01-87f2-67cf02099735と少し混乱していますが、シリアライゼーションのバージョニングの問題です。それが3.5 SP1で修正されると言いますが、明らかにまだ4.0にあります – Nilzor

関連する問題