我在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.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 :(得分: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;
}
我认为其中一位arraylists实际上是持有As。这堂课很大,所以我可能只是错过了它。