[英]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.