使用DataContractSerializer忽略嵌套类型

时间:2017-02-08 20:16:44

标签: c# serialization 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.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上抛出异常。

1 个答案:

答案 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。这堂课很大,所以我可能只是错过了它。