【问题标题】:IXmlSerializable renaming ElementNameIXmlSerializable 重命名 ElementName
【发布时间】:2022-10-01 19:15:52
【问题描述】:

我看到了重命名元素名称的示例,因为我在 XMLWrite 中有很多接口,但是我如何反序列化 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>

如果您知道如何读取 XML 并将其反序列化为我的真实类型?也许某个地方的演员?

没有重命名 xml 看起来像这样并且运行良好,但我喜欢重命名界面。

<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>

    标签: c# serialization deserialization ixmlserializable


    【解决方案1】:

    nvm 刚刚意识到我也可以重命名反序列化器

    XmlRootAttribute x = new XmlRootAttribute();
    x.ElementName = nameof(IViewModel);
    var dwserializer = new XmlSerializer(type,x);
    var a = dwserializer.Deserialize(windowReader);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多