忽略具有DataContractSerializer的嵌套类型



我在C#中有一个类,我正试图使用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.Serialization异常:不应使用数据协定名称为"…"的类型"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();
}

在序列化程序上引发异常。WriteObject。

在多了一点之后,我能够像这样修复它:

[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;
}

我想其中一个数组实际上持有A。这个类很大,所以我可能只是错过了。

相关内容

  • 没有找到相关文章

最新更新