2010-02-15 77 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如果你控制序列化和反序列化。