拥有以下XML模型
<A></A>
<B></B>
<C></C>
<D></D>
还有三个班级
class Foo1{
public string A;
public string B;
}
class Foo2{
public string C;
public string D;
}
class FooUnited{
public Foo1 foo1;
public Foo2 foo2;
}
问题所在。我想将xml反序列化为FooUnited类型的对象。蛮力的想法是从xml手动选择值并初始化FooUnited对象,但也许有一个更优雅的解决方案呢?
答案 0 :(得分:1)
假设您有一个根元素,您可以使用DTO来包装差异:
public class MyDto {
public string A {get;set;}
public string B {get;set;}
public string C {get;set;}
public string D {get;set;}
public FooUnited GetObject() {
return new FooUnited {
foo1 = new Foo1 { A = this.A, B = this.B },
foo2 = new Foo2 { C = this.C, D = this.D },
};
}
}
答案 1 :(得分:0)
不,据我所知,你不能自动做到这一点。要使用XmlSerialization(内置于.NET),对象模型中的层次结构必须与文档中的层次结构匹配。
使用您的类结构,它将是这样的:
<FooUnited>
<Foo1>
<A></A>
<B></B>
</Foo1>
<Foo2>
<C></C>
<D></D>
</Foo2>
</FooUnited>
你需要一个纪念品或DTO,正如MArc描述的那样。
答案 2 :(得分:0)
我很想创建一组不可变类,并使用XPath来解析XML并填充这些类。
如果你同时控制序列化和反序列化,你可以使用像XStream这样的东西。