2017-02-08 93 views
0

我在C#中有一個類,我試圖使用DataContractSerializer進行序列化。它看起來是這樣的:忽略DataContractSerializer的嵌套類型

namespace Foo 
{ 
    [DataContract(Name = "Bar")] 
    class Bar 
    { 
     class A 
     { 
      public A(object a, object b, object c) 
      { 
       d = a; 
       e = b; 
       f = c; 
      } 
      public object d; 
      public object e; 
      public object f; 
     } 

     [DataMember] 
     private ArrayList lst = new ArrayList(); 
     ... 
    } 
} 

當我嘗試序列化這個類,我得到一個錯誤:

「System.Runtime.Serialization.SerializationException:鍵入‘Foo.Bar + A’數據合同如果您使用的是DataContractSerializer,請考慮使用DataContractResolver,或者將未知的靜態類型添加到已知類型的列表中。「

我想要做的是忽略A.它只是一個類型的定義。我試圖序列化的DataMembers都不是A型。

編輯:這是序列化代碼。

public void Serialize() 
{ 
    var writer = new FileStream("testoutput.xml", FileMode.Create); 
    var serializer = new DataContractSerializer(typeof(Bar)); 
    serializer.WriteObject(writer, this); 
    writer.Close(); 
} 

在serializer.WriteObject上拋出異常。

+0

你可以發佈你使用序列化'Bar'類型的對象的代碼嗎? – peval27

+0

@ peval27編輯 – ifangy

+0

@ifangy您的代碼適合我。 .NET版本? – peval27

回答

0

周圍一點點戳戳,我能解決這個問題是這樣的:

[KnownType(typeof(A))] 
[DataContractAttribute] 
class A 
{ 
    public A(object a, object b, object c) 
    { 
     d = a; 
     e = b; 
     f = c; 
    } 
    [DataMember] 
    public object d; 
    [DataMember] 
    public object e; 
    [DataMember] 
    public object f; 
} 

我認爲的ArrayList的一個實際控股爲。這門課很重要,所以我可能只是錯過了。