日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

CLR Via C# 3rd 阅读摘要 -- Chapter 24 – Runtime Serialization

發布時間:2025/5/22 C# 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CLR Via C# 3rd 阅读摘要 -- Chapter 24 – Runtime Serialization 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Serialization/Deserialization Quick Start

  • 序列化是將一個對象以及相關的對象轉換成字節流的過程;反序列化就是序列化的逆過程;
  • System.Runtime.Serialization命名空間;
  • 當序列化一個對象時,Formatter首先抓取程序集標識,并確定程序集通過調用System.Reflection.Assembly.Load()被裝載到執行的AppDomain中;
  • 程序集被裝載后,Formatter在程序集中查找待反序列化對象所匹配的類型,然后實例化再根據流來初始化實例的字段;
  • 一些擴展程序使用Assembly.LoadFrom()來加載程序集,然后從定義在程序集中的類型來構造對象。這些對象在序列化時沒有問題,但是反序列化時,Formatter會嘗試使用Assembly.Load()來加載程序集,大多數情況下,CLR不能準確定位程序集文件,所以可能會引發SerializationException;
  • 因為上面的原因,如果使用Assembly.LoadFrom()來加載程序集,那么強烈建議在反序列化之前處理System.AppDomain.AssemblyResolver事件。
  • Making a Type Serializable

  • 對象在默認情況下是不能序列化的,可以通過給類型加上[Serializable]標簽來實現;
  • [Serializable]屬性不能被子類型所繼承;
  • System.Object有[Serializable]屬性;
  • 一般來說,推薦大多數類型為可序列化的?(我的看法是那些可能會被跨邊界訪問的類型)。
  • Controlling Serialization and Deserialization

  • 至少有兩個原因使得你不打算讓類型實例的一些字段被序列化:
    • 字段的值在反序列化時已經失效了,比如Windows Kernel對象的句柄(文件、進程、線程、互斥體、事件、信號量、……);
    • 字段的值可以在反序列化時很簡單的重新計算出來。
  • 字段加上[NonSerialized]屬性標簽可以阻止該字段被序列化;
  • 如果希望字段在反序列化時被重新計算,可以定義一個方法[OnDeserialized]private void OnDeserialized(StreamingContext context){...}
  • 跟[OnDeserialized]相似的幾個屬性[OnSerializing] -> [OnSerialized] -> [OnDeserializing] -> [OnDeserialized];
  • 如果你序列化一個類型的實例,在類型中加入新的字段,然后在嘗試反序列化時,Formatter會拋出SerializationException指出成員數目不對,可以通過使用[OptionalField]屬性標簽來解決該問題。
  • How Formatters Serialize Type Instances

  • FormatterServices.GetSerializableMembers(), .GetObjectData(), GetTypeFromAssembly(), GetUninitializedObject(), .PopulateObjectMembers()靜態方法。
  • Controlling the Serialized/Deserialized Data

  • 如何完全的控制序列化/反序列化,可以實現System.Runtime.Serialization.ISerializable接口;
  • 一旦類型繼承了ISerializable接口,那么子類型也就必須實現該接口;
  • 建議在GetObjectData方法和特殊構造器上附加[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]屬性標簽;
  • 當Formatter在序列化對象圖時,先查找每一個對象,如果有一個類型實現了ISerializable接口,Formatter就忽略其他所有的客戶屬性,并構造一個新的System.Runtime.Serialization.SerializationInfo對象;
  • 總是調用SerializationInfo.AddValue來加入序列化信息到類型中,如果字段的類型實現了ISerializable接口,別在字段上調用GetObjectData,而是調用AddValue;
  • 如果類型是sealed,那么強烈建議將特殊構造聲明為private;
  • 如果基類沒有實現ISerializable接口,怎樣為類型實現該接口?FormatterServices.GetSerializableMembers()。
  • Streaming Contexts

  • StreamingContext.State, .Context;
  • StreamingContextStates {CrossProcess, CrossMachines, File, Persistence, Remoting, Other, Clone, CrossAppDomain, All};
  • Serializing a Type as a Different Type and Deserializing an Object as a Different Object

    Serialization Surrogates

  • System.Runtime.Serialization.ISerializationSurrogate.GetObjectData(), .SetObjectData();
  • BinaryFormatter有一個bug阻止從序列化對象到其他的引用。要解決該問題,需要傳一個ISerializationSurrogate對象的引用到FormatterServices.GetSurrogateForCyclicalReference()方法;
  • SurrogateSelector.AddSurrogate(),多個SurrogateSelector對象可以被鏈接起來,SurrogateSelector實現了ISurrogateSelector接口。
  • Overriding the Assembly and/or Type When Deserializing an Object

  • System.Runtime.Serialization.SerializationBinder使得反序列化對象到不同的類型非常容易。要做到這點,需要定義的類型繼承自抽象類SerializationBinder。
  • 本章小結

    ?? 本章講了序列化和反序列化的知識,序列化可以講對象轉換成流進行傳輸或者持久化,在需要的時候通過反序列化在將對象構造出來。首先講了如何讓類型具備序列化的能力,以及如何控制序列化的過程。然后講了Formatter如何序列化類型實例,如何控制序列化/反序列化的數據,介紹了StreamingContext對象,演示了如何將對象反序列化到不同的類型實例。接著介紹了序列化代理,最后講了SerializationBinder抽象類可以用來反序列化對象到不同的類型。

    轉載于:https://www.cnblogs.com/bengxia/archive/2010/05/31/1748259.html

    總結

    以上是生活随笔為你收集整理的CLR Via C# 3rd 阅读摘要 -- Chapter 24 – Runtime Serialization的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: av综合色| 成人先锋av| www.在线观看视频 | 91精品国产99 | 在线免费看毛片 | 欧美激情成人 | 牛牛精品视频 | 久久精品视频5 | 国产人妻精品一区二区三区 | 成人一级网站 | 黄色1级片| 在线观看视频二区 | 午夜爽爽爽 | 国产欧美精品一区二区在线播放 | 国产 欧美 日本 | 久久综合久久鬼色 | 国产欧美视频在线 | 色射色 | 国产精品不卡 | 国产国语老龄妇女a片 | 成人免费毛片视频 | 久草福利资源 | 麻豆社| 午夜h视频 | 华人在线视频 | a级片免费看 | 性xxxx视频播放免费 | 欧美性猛交久久久乱大交小说 | 午夜极品| 99热国产在线 | 欧美午夜精品一区二区三区 | 五月综合色婷婷 | 俄罗斯乱妇 | 亚洲www | 色播导航 | 小视频在线免费观看 | 国产精品日韩电影 | 在线天堂中文 | 国产一级黄色电影 | 欧美xxxx18国产 | 在线观看日本视频 | 一区二区三区日韩视频 | 亚洲第七页 | 日本女v片 | 日本一二三区视频在线 | av超碰在线观看 | 超碰在线9 | 一区二区中文字幕 | 日本乱轮视频 | fc2ppv在线观看 | 在线播放亚洲精品 | 欧美黄在线| 高清一区二区在线 | 人人插人人搞 | 亚洲区自拍| 亚洲日本中文 | 亚洲黄色在线网站 | 国产精品久久久久久久 | 轮番上阵免费观看在线电影 | 中文字幕被公侵犯的漂亮人妻 | www.在线观看网站 | 免费毛片软件 | 波多野结衣一区二区三区四区 | 色哟哟视频网站 | 成人夜夜 | 欧洲中文字幕日韩精品成人 | 天堂网2014av | 精品香蕉一区二区三区 | 国产情侣在线视频 | 欧美黑人一级爽快片淫片高清 | 国产天堂在线观看 | 内射国产内射夫妻免费频道 | 精品视频在线观看一区 | 日韩欧美在线观看一区二区三区 | 男女洗澡互摸私密部位视频 | 一区福利视频 | 91在线精品视频 | 亚洲视频一区二区在线观看 | 亚洲国产日韩一区 | 久久久国产精品视频 | 成人片免费看 | 免费在线视频一区 | 色接久久 | 亚洲国产中文字幕在线 | 一区二区三区国产精品视频 | 日韩激情视频网站 | 在线免费激情视频 | 少妇做爰xxxⅹ性视频 | 亚洲免费在线观看av | 日本黄色不卡 | 日韩女优在线 | 亚洲AV无码阿娇国产精品 | 三级毛毛片 | 在线观看国产精品一区 | 日韩色图一区 | 看了让人下面流水的视频 | 欧洲av网站 | 国产精品久久AV无码 | 中文字幕不卡在线观看 |