是否有一个C#库允许将C#对象映射到没有Attributes的XML?
我有几个数据源,它们都包含具有相同逻辑结构但具有不同模式的XML数据。例如,在一个XML中,可能有一个名为'zip-code'的字段,在另一个XML中,这个数据将在名为'postal-code'的属性中。我希望在单个C#类中反序列化所有XML源。
显然我不能使用XMLAttrubtes,因为有不同的'路径'。我想要EclipseLink MOXy(元数据在XML中指定),但对于C#。
答案 0 :(得分:3)
XmlSerializer允许您在运行时动态指定attribute overrides
。假设您有以下静态类:
public class Foo
{
public string Bar { get; set; }
}
以及以下XML:
<?xml version="1.0" encoding="utf-8" ?>
<foo bar="baz" />
您可以在运行时动态添加映射,而无需在模型类上使用任何静态属性。就像这样:
using System;
using System.Xml;
using System.Xml.Serialization;
public class Foo
{
public string Bar { get; set; }
}
class Program
{
static void Main()
{
var overrides = new XmlAttributeOverrides();
overrides.Add(typeof(Foo), new XmlAttributes { XmlRoot = new XmlRootAttribute("foo") });
overrides.Add(typeof(Foo), "Bar", new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("bar") });
var serializer = new XmlSerializer(typeof(Foo), overrides);
using (var reader = XmlReader.Create("test.xml"))
{
var foo = (Foo)serializer.Deserialize(reader);
Console.WriteLine(foo.Bar);
}
}
}
现在剩下的就是编写一些自定义代码,这些代码可能会读取包含属性覆盖的XML文件,并在运行时从中构建XmlAttributeOverrides
的实例,并将其提供给XmlSerializer
构造