我在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。这个类很大,所以我可能只是错过了。