2012-05-10 15 views
1

DCSの使用直列化されたオブジェクトの型が子であるXMLからオブジェクトを逆シリアル化しようとしています。子には直列化復元されたが後でクラスに移動コードのベース。今、これらのプロパティは、デシリアライズされません:DataContractSerializerプロパティの非直列化を派生クラスから基底クラスに移動

<Base i:type="a:DirectoryEntry" xmlns="http://schemas.datacontract.org/2004/07/pending.Core.Models" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://schemas.datacontract.org/2004/07/pending.Core.Models.Directory"> 
    <Active>true</Active> 
    <ContentType>DirectoryEntry</ContentType> 
    <Created>2012-03-12T11:51:25.3401552+01:00</Created> 
    <a:Location>location</a:Location> 
    <a:OpenHours>opening</a:OpenHours> 
</Base> 

のxmlns:aは派生型の名前を表し

は、このXMLを見てみましょう。このクラスはそれらの小道具を保持するために使用されました。現在、それらはBaseクラスに移行され、DCSによってデシリアライズされなくなりました(デシリアライズ後にプロパティはnullになります)。私は、それらの前に(この場合LocationとOpenHours):を使ってプロパティについて話しています。

データを保持するこれらのファイルが多数あります。 DCSでこれらのファイルを正しくデシリアライズするためのオプションは何ですか?

あなたは、基本クラスにプロパティを移動すると、[KnownType]属性は、ベース上での使用の両方と子クラス

答えて

0

私の解決策は、プロパティを元のクラスに戻して、最初に移動したクラスにそのプロパティを残すことでした。今度は、Property hides the inherited member...Use the new keyword if hiding was intendedの警告が表示されますが、デシリアライゼーションが再び機能するため、プロバイダ間でデータを移動することができます。私は他の解決策を見つけることができず、すべてのシリアライズされたデータファイルの変更はオプションではありませんでした。

0

であることに注意してください、彼らは効果的に別のXML名前空間に移動しました。基本クラスはpending.Core.Modelsで定義されていますが、派生クラスはpending.Core.Models.Directoryで定義されています(属性のNamespaceプロパティに何も指定していないと仮定していますので、最後の2つのプロパティを基本クラスに移動した場合は、XML要素LocationOpenHoursの名前空間を変更する必要があります。

<Base i:type="a:DirectoryEntry" 
     xmlns="http://schemas.datacontract.org/2004/07/pending.Core.Models" 
     xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:a="http://schemas.datacontract.org/2004/07/pending.Core.Models.Directory"> 
    <Active>true</Active> 
    <ContentType>DirectoryEntry</ContentType> 
    <Created>2012-03-12T11:51:25.3401552+01:00</Created> 
    <Location>location</Location> 
    <OpenHours>opening</OpenHours> 
</Base> 
+0

これは明らかな答えですが、手動でXMLファイルを変更する必要があります。 DCSがBaseクラスのそれらのプロパティを見つけてそれらに直列化する代替方法を知っていますか? – mare

関連する問題