您好,登錄后才能下訂單哦!
這篇“.Net自定義轉(zhuǎn)換器JsonConverter如何使用”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“.Net自定義轉(zhuǎn)換器JsonConverter如何使用”文章吧。
例如api返回了以下json串 (infcode的值有可能時(shí)string 也可能時(shí)number
有時(shí)候返回時(shí)這個(gè) { "infcode": -1, "detail_msg": null } 有時(shí)后也可能時(shí)這個(gè) { "infcode": "-1", "detail_msg": null }
本人之前在springboot開(kāi)發(fā)的時(shí)候,使用的是fastjson,所以,只要在實(shí)體類(lèi)定義屬性為String,那么無(wú)論是number還是字符串,都會(huì)轉(zhuǎn)換成String.
但是,到了.netcore這邊的就不太管用了. 如果實(shí)體類(lèi)定義是string, json字段是number的話(huà).會(huì)拋出異常The JSON value could not be converted to System.String
默認(rèn)的反序列的寫(xiě)法 (以下),會(huì)報(bào)錯(cuò),不能直接將number轉(zhuǎn)成string
實(shí)體類(lèi)變量= JsonSerializer.Deserialize<實(shí)體類(lèi)類(lèi)型>(jsonString);
要想實(shí)現(xiàn)無(wú)論是number還是字符串, 都能夠反序列化成功的話(huà).這里就需要用到JsonConverter來(lái)實(shí)現(xiàn)了.這里介紹兩種比較直觀的寫(xiě)法
通過(guò)JsonSerializerOptions參數(shù),綁定JsonConverter來(lái)實(shí)現(xiàn)
在實(shí)體類(lèi)的屬性上 增加JsonConverter注解來(lái)實(shí)現(xiàn) (不確定在C#是不是叫注解,在java中是叫注解)
這里新建一個(gè)類(lèi),例如取名為IntJsonConverter.cs .讓其繼承JsonConverter.
然后重寫(xiě)Read方法.
下面是關(guān)鍵部分代碼
public class IntJsonConverter : JsonConverter<string> //這里因?yàn)閷?shí)體類(lèi)的屬性是string 這里就配置儲(chǔ)層string { public override string? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Number) { //這里就簡(jiǎn)單處理以下 如果時(shí)number, 轉(zhuǎn)換為decimal后在toString即可 return reader.GetDecimal().ToString(); } else { return reader.GetString(); } } }
4.然后再需要轉(zhuǎn)換的地方 配置以下反序列化的選項(xiàng)JsonSerializerOptions
var serializeOptions = new JsonSerializerOptions { WriteIndented = true, }; serializeOptions.Converters.Add(new IntJsonConverter()); fsiResponse = JsonSerializer.Deserialize<FsiResponse>(contentStream, serializeOptions);
5.這樣就可以了
同樣需要自定義一個(gè)JsonConverter類(lèi) ,同剛才的步驟.
在實(shí)體類(lèi)上,增加注解,只向這個(gè)轉(zhuǎn)換器
public class FsiResponse { [JsonConverter(typeof(IntJsonConverter))] public string? infcode { get; set; }
3.然后反序列化的時(shí)候, 按照默認(rèn)的寫(xiě)法即可
fsiResponse = JsonSerializer.Deserialize<FsiResponse>(contentStream);
以上就是關(guān)于“.Net自定義轉(zhuǎn)換器JsonConverter如何使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。