2010-02-15 82 views
2

有以下XML模型反序列化平的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

单独是无效的XML - 所有有效的XML文档**必须**只有一个,并且只有一个根元素。 – 2010-02-15 22:43:58

+0

是的,我错过了,谢谢。 – Alexeyss 2010-02-15 23:06:02

回答

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 }, 
     }; 
    } 
} 
0

没有,据我所知,你不能这样做,自动。要使用XmlSerialization(内置于.NET中),对象模型中的层次结构必须与文档中的层次结构匹配。

有了您的类结构,这将是这样的:

<FooUnited> 
    <Foo1> 
     <A></A> 
     <B></B> 
    </Foo1> 
    <Foo2> 
     <C></C> 
     <D></D> 
    </Foo2> 
</FooUnited> 

您将需要一个备忘录或DTO,正如马克描述。

0

我会忍不住创建一套一成不变的类,并使用XPath解析XML和填充这些类。

另外,您可以使用类似的XStream如果你控制序列化和反序列化。