繁体   English   中英

忽略属性的二进制序列化

[英]Ignore binary serialization on a property

我有普通的C#POCO。 在类级别,我正在用[Serializable()]装饰对象。

就是说,我在其中一个属性上使用Linq Sum() ,并且在序列化时收到错误。 如果可能,我只想忽略此属性。 但是, [XmlIgnore()]仅用于Xml序列化,不适用于二进制。 有什么想法或想法吗?

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

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

  public long ValueTotal
  {
    get { return Nums.Sum(x => x.value); }
  }
}

ValueTotal已被忽略。 仅数据被序列化,而不是方法。 属性实际上是方法。

如果您想忽略字段而不进行序列化,请将其标记为[NonSerialized]

'要么'

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

以下是一些有关如何实现ISerializable和序列化数据的示例代码: http : ISerializable


    [NonSerialized]
    private IList<Number> nums;
    public IList<Number> Nums { get {return nums;} set { nums = value; }  } 

这里没有列出的另一种方式有一些好处(以下代码用于支持二进制序列化和xml)(对于您的示例,您将需要一个自定义类来序列化您的接口):

    [OnSerializing]
    private void OnSerializing(StreamingContext context)
    {
        xmlShape4Port = new xmlStreamShape(shape4Port);
        shape4Port = null;
    }
    [OnDeserialized]
    private void OnDeserialized(StreamingContext context)
    {
        if (xmlShape4Port != null)
        {
            shape4Port = xmlShape4Port.getShapeFromSaved();
            xmlShape4Port = null;
        }
    }

    [XmlIgnore()]
    public virtual StreamShape shape4Port {get;set;}

    [XmlElement("shape4Port")]
    public xmlStreamShape xmlShape4Port
    {
        get
        {
            if (shape4Port == null)
                return null;
            else
            {
                return new xmlStreamShape(shape4Port);
            }
        }
        set
        {
            shape4Port = value.getShapeFromSaved();
        }
    }

实现ISerializable接口,然后在GetObjectData()方法中使用[XmlIgnore]进行XML序列化,然后将其输出为二进制。 它实际上比我刚刚描述的要简单。

有关想法,请参阅http://www.c-sharpcorner.com/UploadFile/yougerthen/102162008172741PM/1.aspx

作弊和使用方法

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

  public long GetValueTotal()
  {
    return Nums.Sum(x => x.value);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM