C# 对象的保存和恢复:序列化与反序列化
序列化将数据存储为可移植格式,方便对象在不同应用、系统或机器间传输。
要序列化对象,必须使用 [Serializable]
属性标记,并包含无参数构造函数。 此外,[XmlIgnore]
和 [JsonIgnore]
属性可用于排除特定属性或字段。
示例
考虑以下 SomeClass
:
<code class="language-csharp">[Serializable] public class SomeClass { public string someProperty { get; set; } } SomeClass object1 = new SomeClass { someProperty = "someString" };</code>
保存到文件
二进制序列化 (BinarySerialization):
<code class="language-csharp"> BinaryFormatter binaryFormatter = new BinaryFormatter(); using (Stream stream = File.Create("object1.bin")) { binaryFormatter.Serialize(stream, object1); }</code>
XML 序列化 (XMLSerialization):
<code class="language-csharp"> XmlSerializer serializer = new XmlSerializer(typeof(SomeClass)); using (TextWriter writer = new StreamWriter("object1.xml")) { serializer.Serialize(writer, object1); }</code>
JSON 序列化 (JsonSerialization):
<code class="language-csharp"> using (StreamWriter writer = new StreamWriter("object1.json")) { writer.Write(JsonConvert.SerializeObject(object1)); }</code>
从文件恢复
二进制反序列化 (BinaryDeserialization):
<code class="language-csharp"> BinaryFormatter binaryFormatter = new BinaryFormatter(); using (Stream stream = File.OpenRead("object1.bin")) { object1 = (SomeClass)binaryFormatter.Deserialize(stream); }</code>
XML 反序列化 (XMLDeserialization):
<code class="language-csharp"> XmlSerializer serializer = new XmlSerializer(typeof(SomeClass)); using (TextReader reader = new StreamReader("object1.xml")) { object1 = (SomeClass)serializer.Deserialize(reader); }</code>
JSON 反序列化 (JsonDeserialization):
<code class="language-csharp"> using (StreamReader reader = new StreamReader("object1.json")) { object1 = JsonConvert.DeserializeObject<SomeClass>(reader.ReadToEnd()); }</code>
以上是如何在 C# 中序列化和反序列化对象?的详细内容。更多信息请关注PHP中文网其他相关文章!