<strike id="ca4is"><em id="ca4is"></em></strike>
  • <sup id="ca4is"></sup>
    • <s id="ca4is"><em id="ca4is"></em></s>
      <option id="ca4is"><cite id="ca4is"></cite></option>
    • 二維碼
      企資網

      掃一掃關注

      當前位置: 首頁 » 企資快訊 » 匯總 » 正文

      _System.Text.Json序列化代碼自

      放大字體  縮小字體 發布日期:2021-12-30 08:55:35    作者:江梓可    瀏覽次數:27
      導讀

      前言幾乎所有.NET序列化程序得實現基礎都是反射。下列代碼是Newtonsoft.Json得實現:protectedvirtualJsonPropertyCreateProperty(MemberInfomember,MemberSerializationmemberSerialization) { JsonPropertypropert

      前言

      幾乎所有.NET序列化程序得實現基礎都是反射。下列代碼是Newtonsoft.Json得實現:

      protectedvirtualJsonPropertyCreateProperty(MemberInfomember,MemberSerializationmemberSerialization) { JsonPropertyproperty=newJsonProperty(); property.PropertyType=ReflectionUtils.GetMemberUnderlyingType(member); property.DeclaringType=member.DeclaringType; property.ValueProvider=CreateMemberValueProvider(member); property.AttributeProvider=newReflectionAttributeProvider(member); ...... }

      反射為某些場景提供了強大得功能,但相對于直接編碼,在運行性能上較差,例如Newtonsoft.Json就用緩存進行了優化:

      publicvirtualJsonContractResolveContract(Typetype) { ValidationUtils.ArgumentNotNull(type,nameof(type)); return_contractCache.Get(type); }

      而在.NET 6中,為System.Text.Json提供了Source Generator,可以在編譯時就生成序列化源代碼。

      Demo

      使用方法非常簡單。

      只需實現一個繼承自JsonSerializerContext得類,并聲明JsonSerializable,指定序列化得類型:

      [JsonSerializable(typeof(WeatherForecast))] internalpartialclassWeatherForecastContext:JsonSerializerContext { }

      然后,就可以將自動生成得WeatherForecastContext.Default.WeatherForecast對象作為參數用于序列化:

      varstr=JsonSerializer.Serialize(newWeatherForecast { TemperatureC=Random.Shared.Next(-20,55), Summary=Summaries[Random.Shared.Next(Summaries.Length)] },WeatherForecastContext.Default.WeatherForecast); varobj=JsonSerializer.Deserialize(str,WeatherForecastContext.Default.WeatherForecast);

      單步跟蹤,可以看到生成得序列化代碼如下,

      privatestaticvoidWeatherForecastSerializeHandler(global::System.Text.Json.Utf8JsonWriterwriter,global::WebApplication1.WeatherForecast?value) { if(value==null) { writer.WriteNullValue(); return; } writer.WriteStartObject(); writer.WriteNumber(PropName_TemperatureC,value.TemperatureC); writer.WriteNumber(PropName_TemperatureF,value.TemperatureF); writer.WriteString(PropName_Summary,value.Summary); writer.WriteEndObject(); }

      另外,還可以使用JsonSourceGenerationOptionsAttribute對生成得序列化代碼進行一定調整,比如屬性名大小寫:

      [JsonSourceGenerationOptions(PropertyNamingPolicy=JsonKnownNamingPolicy.CamelCase)] [JsonSerializable(typeof(WeatherForecast))] internalpartialclassWeatherForecastContext:JsonSerializerContext { }

      結論

      在編譯時生成源代碼可為.NET應用程序帶來許多好處,包括提高性能。自家提供得測試結果表明提高了接近40%,有興趣得朋友可以驗證一下:

       
      (文/江梓可)
      免責聲明
      本文僅代表作發布者:江梓可個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
       

      Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

      粵ICP備16078936號

      微信

      關注
      微信

      微信二維碼

      WAP二維碼

      客服

      聯系
      客服

      聯系客服:

      在線QQ: 303377504

      客服電話: 020-82301567

      E_mail郵箱: weilaitui@qq.com

      微信公眾號: weishitui

      客服001 客服002 客服003

      工作時間:

      周一至周五: 09:00 - 18:00

      反饋

      用戶
      反饋

      午夜久久久久久网站,99久久www免费,欧美日本日韩aⅴ在线视频,东京干手机福利视频
        <strike id="ca4is"><em id="ca4is"></em></strike>
      • <sup id="ca4is"></sup>
        • <s id="ca4is"><em id="ca4is"></em></s>
          <option id="ca4is"><cite id="ca4is"></cite></option>
        • 主站蜘蛛池模板: 日本高清色本免费现在观看| 精品国产一区二区三区久久影院 | 日本三级吃奶乳视频在线播放 | 日本成人免费网站| 夏夏和三个老头第二部| 午夜男女爽爽影院网站| 中文在线√天堂| 美女脱了内裤张开腿让男人桶网站| 日日噜狠狠噜天天噜AV| 国产一区二区三区在线视频| 丰满少妇人妻HD高清大乳在线| 蕾丝视频在线看片国产| 果冻传媒第一第二第三集| 国产白白视频在线观看2| 么公的又大又深又硬想要小雪 | 正在播放国产精品放孕妇| 国产美女无遮挡免费视频网站 | youjizz麻豆| 狠狠噜天天噜日日噜视频麻豆| 大佬和我的365天2在线观看 | 亚洲av永久青草无码精品| 色一情一乱一乱91av| 日韩精品亚洲一级在线观看 | 日本人强jizzjizz| 日韩亚洲翔田千里在线| 国产精品国产午夜免费福利看| 亚洲人和日本人jizz| 高清成人爽a毛片免费网站| 日本一二三高清| 免费黄色录像片| 99re热在线观看| 男女一边做一边爽免费视频| 国精品午夜福利视频不卡| 亚洲国产精品无码久久98| 黄色大片在线观看| 成人永久免费高清| 人人爽人人爽人人爽| 窝窝午夜看片七次郎青草视频 | 国产高潮国产高潮久久久| 亚洲AV无码成人黄网站在线观看| 苍井苍空A免费井线在线观看|