DataContractAttribute和SerializableAttribute可以一起使用。这里的奖励是,你也不需要使用单独的串行器。 DataContractSerialzer是一个XmlObjectSerializer,它本身支持[Serializable]。例如:
[Serializable]
public class TestClass
{
public string Name { get; set; }
}
{
var formatter = new DataContractSerializer(typeof(TestClass));
using (var stream = new MemoryStream())
{
var instance = new TestClass { Name = "Matt" };
formatter.WriteObject(stream, instance);
stream.Seek(0, SeekOrigin.Begin);
var second = (TestClass) formatter.ReadObject(stream);
Console.WriteLine(second.Name);
}
}
输出: “马特”
使用只是一个SerializableAttribute属性,我们可以成功地连载和deserialise使用DataContractSerializer的对象...
使用ISerializable的,我们可以做同样的事情:
[Serializable]
public class TestClass2 : ISerializable
{
public TestClass2() { }
protected TestClass2(SerializationInfo info, StreamingContext context)
{
Name = info.GetString("name").ToUpper();
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("name", Name);
}
public string Name { get; set; }
}
{
var formatter = new DataContractSerializer(typeof(TestClass2));
using (var stream = new MemoryStream())
{
var instance = new TestClass2 { Name = "Matt" };
formatter.WriteObject(stream, instance);
stream.Seek(0, SeekOrigin.Begin);
var second = (TestClass2)formatter.ReadObject(stream);
Console.WriteLine(second.Name);
}
}
OUTPUT “MATT”
并配有DataContractAttribute:
[DataContract, Serializable]
public class TestClass3
{
public int Age { get; set; }
[DataMember]
public string Name { get; set; }
}
{
var formatter = new DataContractSerializer(typeof(TestClass3));
using (var stream = new MemoryStream())
{
var instance = new TestClass3 { Name = "Matt", Age = 26 };
formatter.WriteObject(stream, instance);
stream.Seek(0, SeekOrigin.Begin);
var second = (TestClass3)formatter.ReadObject(stream);
Console.WriteLine(second.Name);
Console.WriteLine(second.Age);
}
}
OUTPUT: “马特”
OUTPUT:0
当的DataContractSerializer遇到类型与DataContractAttribute ,它将使用它来代替将序列化传递给其基类型,该类型处理SerializableAttribute和ISerializable int erfaces。
如果遇到问题,是序列化还是反序列化,还是两者兼有?
Downvoted是因为? – 2013-09-30 10:22:43
您的所有样品中的3个似乎都缺少功能特征线。 – dotNET 2017-05-24 18:04:50