シリアライズ頭痛を引き起こす別のアセンブリで/同じ名前の入れ子になったクラス
-
18-09-2019 - |
質問
私が悪いエンジニアリングAPIで働いています。私はシリアライズする必要がクラスを持っている、と私はクラスのメイクオーバー制御ではなく、クラスがserialzingされるプロパティを構成しているタイプがあります。以下の例は次のとおりです。
<Project>
<SomeProperty1 />
<Install>
<DefaultStep></DefaultStep>
</Install>
<Uninstall>
<DefaultStep></DefaultStep>
</Uninstall>
</Project>
問題は、私は、「インストール」を制御することはできませんし、「アンインストール」タイプ、およびそのネストされた型が同じ名前を持っている、です。 MyCompany.Install.dllに存在する「インストール」、および「アンインストール」MyCompany.Uninstall.dllに存在します。しかし、キッカーは、完全に無意味であるMyCompany.Uninstall.dll refererences MyCompany.Install.dll、です。 私は、これは悪いデザインです知っている(私が扱っています全体のフレームワークがひどいです)が、私はそれでの作業中に選択肢を持っていません。
私が手にエラーがあります:
"タイプ 'MyCompany.Install.Uninstall.DefaultStep' そして、「MyCompany.Install.DefaultStep」 両方のXMLタイプ名を使用し、 名前空間から 'DefaultStep'、 ''。つかいます XMLは、独自のXMLを指定する属性を 名前および/またはタイプの名前空間。 "
私は、「インストール」と「アンインストール」クラスを含むアセンブリの上にゼロ制御している以外、いいアイデアだろう。
任意のアイデア?
解決 2
私は作品の答えを見つけました。この記事のコメント: http://www.codeproject.com/KB/XML/xmlserializerforunknown .aspxのの
この記事に私を導きました: http://mfharoon.blogspot.com/2006/ 12 /使用-ixmlserializableツー克服-not.htmlする
は、変更する必要がある唯一のものは読む必要があるライン108、次のとおりです。
writer.WriteAttributeString( "タイプ"、_parameters.GetType()AssemblyQualifiedName.ToString());
型が別のアセンブリ内にある場合、これは、シリアル化の作業をさせます。
HTH!
他のヒント
、私はのDataContractシリアライザを使用して、IDataContractSurrogateを実装します。サロゲート連載では、シリアライズ時に代替タイプのシリアライズを台無しにされてうるさいタイプを置き換えることができます。あなたは代理を完全に制御できます。それはあなたが問題を解決するのに役立つはずです。
http://msdn.microsoft.com /en-us/library/system.runtime.serialization.idatacontractsurrogate.aspxする