序列化时忽略基类成员



在序列化派生类的对象时,我们如何忽略特定的基类成员?

背景

在我的例子中,基类是UndirectedGraph(来自QuickGraph库(。除其他事项外,此类中有两个我不想序列化的成员:

public class UndirectedGraph<TVertex, TEdge>
{
public IEnumerable<TEdge> Edges { get; }
public IEnumerable<TVertex> Vertices { get; }
}

所以我从这个类中衍生出来,并制作了自己的课程。然后,我用new重新定义了这两个成员,并对它们应用了IgnoreDataMember。喜欢这个:

public class OurGraph : UndirectedGraph
{
[IgnoreDataMember]
public new IEnumerable<XMLDoc> Vertices => base.Vertices;
[IgnoreDataMember]
public new IEnumerable<OurEdge> Edges => base.Edges;
}

现在我使用DataContractSerializerOurGraph的对象写入文件:

public static string SerializeDC(this object obj)
{
XmlSerializerNamespaces Namespaces = new XmlSerializerNamespaces();
Namespaces.Add(string.Empty, string.Empty);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
using (StringWriter writer = new StringWriter(sb))
{
using (XmlWriter xmlWriter = XmlWriter.Create(writer, myXmlWriterSettings))
{
DSSerializer.WriteObject(xmlWriter, obj);
xmlWriter.Close();
}
writer.Close();
}
return sb.ToString();
}

不幸的是,这两个成员仍然找到了进入输出的方式。我做错了什么?

编辑

在进行进一步实验时,除非您在包含类上应用DataContract属性,否则看起来IgnoreDataMember不起作用。现在DataContract类上应用属性要求其基类也应用DataContract(或Serializable(属性,在我的情况下是第三方类,我无法更改该代码。

我运气不好吗?

  1. 在类上使用可序列化属性。
  2. 对不想序列化的类属性使用非序列化属性。

希望这能解决您的问题。

相关内容

  • 没有找到相关文章

最新更新