gpt4 book ai didi

c# - 未知类型的自定义 Xml 序列化

转载 作者:行者123 更新时间:2023-11-30 15:49:57 25 4
gpt4 key购买 nike

我正在尝试通过 XmlSerializer 反序列化自定义类并遇到一些问题,事实上我不知道我将要反序列化的类型(它是可插入的)并且我遇到了困难确定它。

我找到了 this post它看起来很相似,但不能完全适用于我的方法,因为我需要反序列化一个可 XmlSerializable 的接口(interface)。

我目前得到的是表格。请注意,我希望并且需要能够处理通过插件实现的 A 类和 B 类。因此,如果我可以避免使用 IXmlSerializable(我认为我不能这样做),那就太好了。

A 的 ReadXml 是我所坚持的。但是,如果我可以进行其他更改来改进系统,那么我很乐意这样做。

public class A : IXmlSerializable
{
public IB MyB { get; set;}

public void ReadXml(System.Xml.XmlReader reader)
{
// deserialize other member attributes

SeekElement(reader, "MyB");
string typeName = reader.GetAttribute("Type");

// Somehow need to the type based on the typename. From potentially
//an external assembly. Is it possible to use the extra types passed
//into an XMlSerializer Constructor???
Type bType = ???

// Somehow then need to deserialize B's Members
// Deserialize X
// Deserialize Y
}

public void WriteXml(System.Xml.XmlWriter writer)
{
// serialize other members as attributes

writer.WriteStartElement("MyB");
writer.WriteAttributeString("Type", this.MyB.GetType().ToString());
this.MyB.WriteXml(writer);
writer.WriteEndElement();
}

private void SeekElement(XmlReader reader, string elementName)
{
ReaderToNextNode(reader);
while (reader.Name != elementName)
{
ReaderToNextNode(reader);
}
}

private void ReaderToNextNode(XmlReader reader)
{
reader.Read();
while (reader.NodeType == XmlNodeType.Whitespace)
{
reader.Read();
}
}
}

public interface IB : IXmlSerializable
{
}

public class B : IB
{

public void ReadXml(XmlReader reader)
{
this.X = Convert.ToDouble(reader.GetAttribute("x"));
this.Y = Convert.ToDouble(reader.GetAttribute("y"));
}

public void WriteXml(XmlWriter writer)
{
writer.WriteAttributeString("x", this.X.ToString());
writer.WriteAttributeString("y", this.Y.ToString());
}
}

注意:更新是因为我意识到 B 应该使用接口(interface) IB。抱歉,问题有点错误。

最佳答案

要从字符串创建实例,请使用 Activator.CreateInstance 的重载之一。要仅获取具有该名称的类型,请使用 Type.GetType。

关于c# - 未知类型的自定义 Xml 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com