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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Teams Bot 如何使用新的 System.Text.Json 库

發布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Teams Bot 如何使用新的 System.Text.Json 库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我最近把 LuckyDraw的代碼升級到了 .net core 3.1,當然我也很想使用最新的微軟json庫,System.Text.Json這個庫的性能比之前Newtonsoft.Json速度更快,而且就我本人愛好來說,更加喜歡System.Text.Json的命名,之前一直覺得 JObject, JArray, JToken 這些名字不夠符合 c# 的 naming guideline。

微軟?這篇文章?很好的告訴大家如何將 Newtonsoft.Json 遷移到 System.Text.Json,但是如果你是用Bot SDK來開發teams bot,事情比你想象的復雜很多。

我們先來看一下bot sdk的sample code是怎么做的,打開EchoBot的代碼,找到Startup.cs文件,你可以看到這么一行:

public class Startup {...public void ConfigureServices(IServiceCollection services){services.AddControllers().AddNewtonsoftJson();...} }

現在大家明白了把,bot samples雖然都已經升級到了.net core 3.1,但是,它還是把mvc設置成使用Newtonsoft.Json。

那問題到底在哪里,為什么一定要使用Newtonsoft? 我們來看一下bot sdk源碼,看一下bot framework里最核心的Activity的代碼。

public partial class Activity {...[JsonProperty(PropertyName = "type")]public string Type { get; set; }[JsonProperty(PropertyName = "id")]public string Id { get; set; }[JsonProperty(PropertyName = "timestamp")]public System.DateTimeOffset? Timestamp { get; set; }[JsonProperty(PropertyName = "localTimestamp")]public System.DateTimeOffset? LocalTimestamp { get; set; }[JsonProperty(PropertyName = "localTimezone")]public string LocalTimezone { get; set; }[JsonProperty(PropertyName = "serviceUrl")]public string ServiceUrl { get; set; }[JsonProperty(PropertyName = "channelId")]public string ChannelId { get; set; }[JsonProperty(PropertyName = "from")]public ChannelAccount From { get; set; }... }

可以看到每個property都有一個JsonProperty的attribute,這個attribute是在Newtonsoft.Json里定義的,當序列化的時候,會使用指定的name作為json里的屬性名字。當然在新的System.Text.Json里也有一個對應的attribute,叫JsonPropertyName,所以問題就來了,如果我們使用新的System.Text.Json來對一個activity對象進行serialize和deserialize,由于屬性 Type 上只有JsonProperty并沒有新的JsonPropertyName,serialize后,json就用了首字母大寫的{"Type":"blablabla"},如果是使用老的Newtonsoft.Json,那就是{"type":"blablabla"}。

當然不單單是JsonProperty這么一個問題,還有其他json序列化和反序列化的一些attribute也有類似問題,比如下面這兩個:

namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Templates {[JsonConverter(typeof(ActivityTemplateConverter))]public class ActivityTemplate : ITemplate<Activity>{...} } namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Actions {public class BeginDialog : BaseInvokeDialog{[JsonConstructor]public BeginDialog(...): base(dialogIdToCall, options){...}...} }

正式由于上面這些問題,所以如果要繼續擁護在mvc里使用新的System.Text.Json,同時又要使用bot sdk來做開發,那就必須在和bot sdk里一些對象打交道的時候使用老的Newtonsoft.Json。

比如以前可以這么寫:

public class MessagesController : ControllerBase {[HttpPost("messages")]public async Task<IActionResult> GetMessage([FromBody]Activity activity){...} }

現在就要:

public class MessagesController : ControllerBase {[HttpPost("messages")]public async Task<IActionResult> GetMessage(){Activity activity;using (var streamReader = new StreamReader(Request.Body)){var bodyString = await streamReader.ReadToEndAsync();activity = JsonConvert.DeserializeObject<Activity>(bodyString);}...} }

因為你不能再依賴于mvc來幫你deserialize出Activity對象,因為我們的mvc是使用新的System.Text.Json。

當我們要返回一個activity對象的時候,以前可以這樣:

[HttpPost("messages")] public async Task<IActionResult> GetMessage([FromBody]Activity activity) {Activity repliedActivity;...return Ok(repliedActivity); }

現在就要:

[HttpPost("messages")] public async Task<IActionResult> GetMessage() {Activity repliedActivity;...return OkFromNewtonsoftJson(repliedActivity); }private IActionResult OkFromNewtonsoftJson(object value) {if (value == null){return NoContent();}var json = JsonConvert.SerializeObject(value);return Content(json, "application/json", Encoding.UTF8); }

因為我們不能再靠mvc來幫你serialize一個Activity對象,必須手動使用Newtonsoft.Json來序列化。

希望bot sdk和其他sdk,能夠盡快的兼容新的Json庫,這樣才能使廣大開發者擁抱 System.Text.Json。

總結

以上是生活随笔為你收集整理的Teams Bot 如何使用新的 System.Text.Json 库的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 好看的av网址 | 天天狠天天插 | 国产日本欧美在线观看 | 天躁夜夜躁狼狠躁 | 毛片网站免费观看 | 成人免费网站视频 | 男女草逼网站 | 久久一本综合 | 国产精品美女久久久久 | 女生裸体无遮挡 | 欧美一级黄色片 | 日韩欧美自拍偷拍 | 一区二区精品在线 | 亚洲精品久久久久久国产精华液 | 夜夜嗨视频 | 国精产品99永久一区一区 | 极品白嫩丰满少妇无套 | 美女视频久久久 | 日韩欧美国产精品综合嫩v 国产小毛片 | 欧美日本韩国一区二区三区 | 少妇高潮一区二区三区 | 久久九九精品视频 | 大桥未久av在线播放 | 婷婷欧美 | 欧美性大战久久久久久久蜜桃 | 国产交换配乱淫视频免费 | 在线观看视频色 | 污污视频网站免费观看 | 亚洲一区二区三区视频在线 | 一区=区三区乱码 | 日一区二区三区 | 久久久久99精品成人片 | 国产一区二区三区久久久 | 欧美日韩国产成人 | 韩国av一区 | 波多野结衣在线一区 | 狐狸视频污 | 吞精囗交69激情欧美 | 人人射影院 | 猛男大粗猛爽h男人味 | 欧美高清hd18日本 | 青青草狠狠干 | 国产成人91 | 日韩在线观看 | 欧美精品久久久久久久自慰 | 在线高清观看免费观看 | 伊人影视网 | 国产成人+综合亚洲+天堂 | 在线视频这里只有精品 | 成人动漫一区二区 | 久久久精品亚洲 | a爱视频| 久草免费资源 | 女人被狂躁60分钟视频 | 日本在线不卡一区二区 | 一级少妇毛片 | 欧美日韩在线网站 | 蜜桃一区二区 | 国产美女视频网站 | 成人www视频 | 污视频免费网站 | 日本大尺度吃奶做爰久久久绯色 | 污污污污污污www网站免费 | 毛片网络 | 日韩在线观看精品 | 羞羞色院91蜜桃 | 国产乱轮视频 | 蜜桃视频污在线观看 | 亚洲91久久 | 91精品国产综合久久香蕉 | 西野翔之公侵犯中文字幕 | 草视频在线观看 | 成人免费在线看片 | 亚洲免费播放 | 久久男| 亚洲综合色一区 | 国产精品国产三级国产aⅴ中文 | 麻豆久久久9性大片 | 精品国产一区二区三区四区精华 | 边打电话边做 | 色婷婷一区二区 | 久草手机在线视频 | 99爱国产 | 日本福利一区二区三区 | 中国av在线播放 | 黑人巨大精品欧美一区二区蜜桃 | 五月开心播播网 | 在线观看黄色国产 | 一道本久在线中文字幕 | 国产黄色在线观看 | 亚洲 欧美 激情 另类 校园 | 国产精品无码专区av在线播放 | 天天干免费视频 | 小罗莉极品一线天在线 | 欧美国产专区 | 欧美性色黄大片手机版 | 69视频网站 | 亚洲免费一区 | 国产第三页 |