[英]How to exclude an attribute when serializing C#-object
如何防止屬性被序列化? 我有一個抽象類,該類標記有[Serializable]。 但我不希望將屬性Checksum包含在序列化中。 我怎么做?
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography;
namespace test
{
[DataContract]
[Serializable]
public abstract class Baseclass
{
/// <summary>
/// The product id.
/// </summary>
[DataMember(Name = "productId")]
public int ProductId { get; set; }
/// <summary>
/// The calculated checksum for this object.
/// It is calculated using SHA1.
/// For more information about SHA-1, see https://en.wikipedia.org/wiki/SHA-1
/// </summary>
[DataMember(Name = "checksum")]
public long Checksum
{
get
{
long tempHash = 0;
try
{
this.temp = 0;
var seraializer = new BinaryFormatter();
var sha1 = new SHA1Managed();
byte[] buffer;
using (var memoryStream = new MemoryStream())
{
seraializer.Serialize(memoryStream, this);
buffer = memoryStream.ToArray();
}
var bArrayHash = sha1.ComputeHash(buffer);
tempHash = Math.Abs(BitConverter.ToInt64(bArrayHash, 0));
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return tempHash;
}
}
}
}
我已經嘗試過MSDN( https://msdn.microsoft.com/zh-cn/library/system.nonserializedattribute.aspx )中的以下代碼,但是當我嘗試將其應用於我的代碼時,編譯器說它無效在此聲明類型上,並且僅在“字段”聲明上有效。
// A test object that needs to be serialized.
[Serializable()]
public class TestSimpleObject {
public int member1;
public string member2;
public string member3;
public double member4;
// A field that is not serialized.
[NonSerialized()] public string member5;
public TestSimpleObject() {
member1 = 11;
member2 = "hello";
member3 = "hello";
member4 = 3.14159265;
member5 = "hello world!";
}
public void Print() {
Console.WriteLine("member1 = '{0}'", member1);
Console.WriteLine("member2 = '{0}'", member2);
Console.WriteLine("member3 = '{0}'", member3);
Console.WriteLine("member4 = '{0}'", member4);
Console.WriteLine("member5 = '{0}'", member5);
}
}
如果[JsonIgnore]
類轉換為JSON對象,則可以使用[XmlIgnore()]
或[JsonIgnore]
裝飾屬性,具體取決於所使用的序列化程序
由於BinaryFormatter對字段進行序列化,因此無法正常工作,請參閱如何忽略使用BinaryFormatter進行序列化的屬性? 。
因此,我認為解決方案是重新設計我的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.