0

i seen exemple for renaming my Element name since i have lot interface in XMLWrite but how i can deserialize the right type in XMLRead()?

public void WriteXml(XmlWriter writer)
{

 XmlRootAttribute x = new XmlRootAttribute();          
 x.ElementName = nameof(IViewModel);
 var dwserializer = new XmlSerializer(this.DataContext.GetType(),x);
 dwserializer.Serialize(writer, this.DataContext);            
}


 

public void ReadXml(XmlReader windowReader)
{
 var type = Type.GetType(windowReader.GetAttribute("AssemblyQualifiedName")); //this come from Viemodel Serialization                           
 var dwserializer = new XmlSerializer(type);
 var a = dwserializer.Deserialize(windowReader); //this throw error since it read unentended "IViewModel"
}



 <Workspace Title="WS-001" NosWorkSpaceGuid="7f81ed2e-a511-4f9d-81db-9728304dad67">
    <ViewCollection>
    <ChartWindow AssemblyQualifiedName="CustomView.ChartWindow, ChartWindows, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Top="78" Left="78" Height="1023" Width="2580">
    <IViewModel AssemblyQualifiedName="CustomView.ChartWindowViewModel, ChartWindows, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Guid="606a4303-4662-4092-9c92-c452fb0f2860">
    <Conteners/>
    </IViewModel>
    </ChartWindow>
    </ViewCollection>
    </Workspace>

if you have an idea how i can read XML and deserialize it into my real type? maybe a cast somewhere?

without renaming xml look like this and workwell but i like have the interface renaming.

<Workspace Title="WS-001" NosWorkSpaceGuid="08f17674-f7be-418a-a388-e3fc8796cb92">
<ViewCollection>
<ChartWindow AssemblyQualifiedName="CustomView.ChartWindow, ChartWindows, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Top="226" Left="845" Height="1023" Width="2580">
<ChartWindowViewModel AssemblyQualifiedName="CustomView.ChartWindowViewModel, ChartWindows, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Guid="276d0b1b-e3d9-4067-a56e-ecc43faaa4e4">
<Conteners/>
</ChartWindowViewModel>
</ChartWindow>
</ViewCollection>
</Workspace>
Zwan
  • 632
  • 2
  • 6
  • 23

1 Answers1

0

nvm just realized i can rename deserializer too

XmlRootAttribute x = new XmlRootAttribute();
x.ElementName = nameof(IViewModel);
var dwserializer = new XmlSerializer(type,x);
var a = dwserializer.Deserialize(windowReader);
Zwan
  • 632
  • 2
  • 6
  • 23