忽略属性上的二进制序列化

Jes*_*ule 33 c# serialization

我有一个普通的C#POCO.在班级,我正在装饰对象[Serializable()].

也就是说,我Sum()在其中一个属性上使用Linq ,并且在序列化时收到错误.如果可能的话,我想简单地忽略这个属性.但是,[XmlIgnore()]它仅用于Xml序列化,而不是二进制.任何想法或想法?

代码是这样的,我想忽略ValueTotal:

[Serializable()]
public class Foo
{
  public IList<Number> Nums { get; set; }

  public long ValueTotal
  {
    get { return Nums.Sum(x => x.value); }
  }
}
Run Code Online (Sandbox Code Playgroud)

ata*_*ata 61

ValueTotal已经被忽略了.只序列化数据,而不是方法.属性实际上是方法.

如果您希望忽略字段而不是序列化它们,请将它们标记为[NonSerialized].

'要么'

您可以实现ISerializable而不是序列化这些字段.

下面是一些关于如何实现ISerializable和序列化数据的示例代码:http://www.c-sharpcorner.com/UploadFile/yougerthen/102162008172741PM/1.aspx


Hen*_*rik 35


    [NonSerialized]
    private IList<Number> nums;
    public IList<Number> Nums { get {return nums;} set { nums = value; }  } 
Run Code Online (Sandbox Code Playgroud)

  • 无需忽略ValueTotal属性.二进制序列化序列化字段,而不是属性 (13认同)

Sco*_*hic -15

作弊并使用方法

[Serializable()]
public class Foo
{
  public IList<Number> Nums { get; set; }

  public long GetValueTotal()
  {
    return Nums.Sum(x => x.value);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这是完全错误的。`BinaryFormatter` 不查看方法或属性 - 它只查看字段。将属性更改为字段不应“以任何方式”影响“BinaryFormatter”在此处的工作方式。 (23认同)