gpt4 book ai didi

c# - 我可以使用接口(interface)或多态性将两个不同的 xml 文件反序列化为一个对象类型吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:20 24 4
gpt4 key购买 nike

我有两个 xml 文件,它们具有相同的数据但标签名称不同。一个是命名引用标签,另一个是简短版本。

由于数据完全相同,我希望能够将这些文件反序列化为对象,但我不想处理两个单独的对象。

为了反序列化我创建了以下类的文件:

[XmlRoot(ElementName="Message")]
public class ONIXMessage
{
[XmlAttribute(AttributeName="release")]
public string Release { get; set; }

[XmlElement("Header")]
public Header Header { get; set; }

[XmlElement("Product")]
public List<Product> Products { get; set; }
}

对于带有短标签的文件,我有这个:

[XmlRoot(ElementName="message")]
public class ONIXMessage
{
[XmlAttribute(AttributeName="release")]
public string Release { get; set; }

[XmlElement("x1")]
public Header Header { get; set; }

[XmlElement("x2")]
public List<Product> Products { get; set; }
}

我尝试过使用接口(interface),但不确定如何让 header 和产品正确返回。它们对于每个版本也不同。

是否有更好的反序列化 xml 的方法?或者这仍然可以用我已有的东西来完成吗?

如有任何帮助,我们将不胜感激。

编辑:

只用了五年,但我想通了!这可以通过使用 XmlAttributeOverrides 来实现。 http://www.ikriv.com/dev/dotnet/OverrideXml.shtml

最佳答案

接口(interface)可能是最好的方式。我会做的是将接口(interface)与工厂混合起来,然后做类似的事情:

public interface IMessageReader()
{
ONIXMessage Read(string xml);
}

public static class ONIXMessageFactory
{
private static IList<IMessageReader> readers = new List<IMessageReader>();

public static ONIXMessage CreateMessage(string xml)
{
var reader = GetReader(xml);
return reader.Read(xml);
}

public static IMessageReader GetReader(string xml)
{
// Somehow identify which reader would be required.
}
}

由此您可以创建两个专门的阅读器,并使用一个工厂来控制使用所需阅读器创建的消息。比较棘手的部分是确定要使用哪个阅读器。

希望这能让你开始......

关于c# - 我可以使用接口(interface)或多态性将两个不同的 xml 文件反序列化为一个对象类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3149184/

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