最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# Newtonsoft自定義JsonConverter的實現(xiàn)

 更新時間:2025年03月20日 08:58:46   作者:likepoems  
本文介紹了在C#中使用Newtonsoft庫進行JSON對象和字符串的序列化與反序列化,具有一定的參考價值,感興趣的可以了解一下

在C#中,我們使用Newtonsoft來對JSON對象或字段串進行序列化和反序列化的操作,但在某些場景下,需要在映射過程中需要對屬性進行更改。

1、JsonProperty

JsonProperty用于指定特定字段的名稱,將一個字段指定為另一個字段,示例如下:

public class UserInfo
{
    [JsonProperty("用戶名")]
    public string Name { get; set; }
    [JsonProperty("年齡")]
    public string Age { get; set; }
}
var tom = new UserInfo{Name = 'Tom', Age = 20};
var jsonstr = JsonConvert.SerializeObject(tom);
var json = JsonConvert.DeserializeObject<UserInfo>(jsonstr);

這時jsonstr的值就是{“用戶名”:“Tom”,“年齡”:20};
但是這會有個問題,json對象的Name和Age都是null;
原因是指定的字段名不匹配,也就是說json字符串中字段名要與JsonProperty的值相同才能正確的映射。

2、自定義JsonConverter

public class JsonToChineseConverter<T> : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(T);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JObject jsonObject = JObject.Load(reader);
        T targetObject = (T)Activator.CreateInstance(objectType);
        foreach (var property in objectType.GetProperties())
        {
            NameAttribute nameAttribute = property.GetCustomAttribute<NameAttribute>();
            string propertyName = nameAttribute != null ? nameAttribute.ChineseName : property.Name;
            if (jsonObject[propertyName] != null)
            {
                property.SetValue(targetObject, jsonObject[propertyName].ToObject(property.PropertyType, serializer));
            }
        }
        return targetObject;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        JObject jsonObject = new JObject();
        Type objectType = value.GetType();
        foreach (var property in objectType.GetProperties())
        {
            NameAttribute nameAttribute = property.GetCustomAttribute<NameAttribute>();
            string propertyName = nameAttribute != null ? nameAttribute.ChineseName : property.Name;
            jsonObject[propertyName] = JToken.FromObject(property.GetValue(value), serializer);
        }
        jsonObject.WriteTo(writer);
    }
}

[AttributeUsage(AttributeTargets.Property)]
public class NameAttribute : Attribute
{
    public string ChineseName {
        get;
    }
    public NameAttribute(string chineseName)
    {
        ChineseName = chineseName;
    }
}

說明:

  • JsonToChineseConverter 是一個泛型的類,繼承JsonConverter,用于在 JSON 序列化和反序列化過程中,將 JSON 中的字段名從中文名稱映射到 C# 對象的屬性名,或者反過來將 C# 對象的屬性名映射為中文名稱。

  • 該類通過自定義特性 [NameAttribute] 來對類的屬性進行標記,并指定它的中文名稱,如果沒有標記,則使用本身的屬性。

  • CanConvert:判斷當前轉(zhuǎn)換器是否適用于指定的類型 T。
    ReadJson:在反序列化時,將 JSON 數(shù)據(jù)轉(zhuǎn)換為 C# 對象。根據(jù) [NameAttribute] 的中文名稱找到對應(yīng)的屬性并賦值。
    WriteJson:在序列化時,將 C# 對象轉(zhuǎn)換為 JSON 數(shù)據(jù)。根據(jù) [NameAttribute] 的中文名稱生成對應(yīng)的 JSON 字段。

使用方法:

public class UserInfo
{
    [Name("用戶名")]
    public string Name { get; set; }
    [Name("年齡")]
    public string Age { get; set; }
}
var tom = new UserInfo{Name = 'Tom', Age = 20};
var setting = new JsonToChineseConverter<UserInfo>();
var jsonstr = JsonConvert.SerializeObject(tom, setting);
var json = JsonConvert.DeserializeObject<UserInfo>(jsonstr, setting);
Console.WriteLine(jsonstr); // {"用戶名":"Tom","年齡":20}

json對象:
Name:Tom
Age: 20

到此這篇關(guān)于C# Newtonsoft自定義JsonConverter的實現(xiàn)的文章就介紹到這了,更多相關(guān)C# 自定義JsonConverter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 設(shè)置系統(tǒng)日期格式的方法

    C# 設(shè)置系統(tǒng)日期格式的方法

    公司電腦各式各樣的都有,里面的設(shè)置也有很多不統(tǒng)一的,我們做軟件一般會從系統(tǒng)中獲取一些數(shù)據(jù),比如日期時間,環(huán)境變量的路徑參數(shù),可以用批處理文件達到我們所想要的目的,也可以用C#代碼
    2013-03-03
  • Unity實現(xiàn)瞄準鏡效果

    Unity實現(xiàn)瞄準鏡效果

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)瞄準鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 簡單介紹三層架構(gòu)工作原理

    簡單介紹三層架構(gòu)工作原理

    這篇文章介紹了三層架構(gòu)的工作原理,二層與三層架構(gòu)的區(qū)別,三層架構(gòu)的優(yōu)劣勢。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C# WinForm中禁止改變窗口大小的方法

    C# WinForm中禁止改變窗口大小的方法

    這篇文章主要介紹了C# WinForm中禁止改變窗口大小的方法,需要把FormBorderStyle和MaximizeBox的值固定即可,需要的朋友可以參考下
    2014-08-08
  • C#實現(xiàn)簡單播放mp3的方法

    C#實現(xiàn)簡單播放mp3的方法

    這篇文章主要介紹了C#實現(xiàn)簡單播放mp3的方法,涉及C#播放多媒體文件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+ObjectArx2008)

    詳解ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+Object

    這篇文章主要介紹了ObjectARX開發(fā)環(huán)境的創(chuàng)建與開發(fā)實例Hello World(VS2005+AutoCad2008+ObjectArx2008),本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C#實現(xiàn)一鍵清空控件值的示例代碼

    C#實現(xiàn)一鍵清空控件值的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C#語言實現(xiàn)一鍵清空控件值的功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定幫助,需要的可以參考一下
    2022-09-09
  • 使用C#編寫兩個漂亮?xí)r鐘的示例代碼

    使用C#編寫兩個漂亮?xí)r鐘的示例代碼

    這篇文章主要為大家分享了兩個使用C#編寫的兩個漂亮?xí)r鐘的示例代碼,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的可以了解一下
    2023-07-07
  • C#將Word轉(zhuǎn)換為RTF的高效解決方案

    C#將Word轉(zhuǎn)換為RTF的高效解決方案

    在日常辦公和開發(fā)中,我們經(jīng)常需要將Word文檔轉(zhuǎn)換為RTF格式,本文將介紹一種易集成的 C# 解決方案 - 使用 Spire.Doc for .NET 實現(xiàn) Word 轉(zhuǎn) RTF,幫助開發(fā)者快速完成文檔格式轉(zhuǎn)換,需要的朋友可以參考下
    2025-09-09
  • C# OpenVINO實現(xiàn)圖片旋轉(zhuǎn)角度檢測

    C# OpenVINO實現(xiàn)圖片旋轉(zhuǎn)角度檢測

    這篇文章主要為大家詳細介紹了C#?OpenVINO如何實現(xiàn)圖片旋轉(zhuǎn)角度檢測,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02

最新評論

新郑市| 临安市| 澄迈县| 名山县| 江城| 吴堡县| 平利县| 赫章县| 房山区| 城步| 安龙县| 泾川县| 朝阳市| 辛集市| 吉林市| 靖宇县| 扎兰屯市| 谢通门县| 肥东县| 建水县| 通道| 江源县| 泸州市| 易门县| 泰安市| 康乐县| 凤台县| 安龙县| 金沙县| 刚察县| 南宁市| 荣昌县| 华阴市| 边坝县| 娱乐| 拉萨市| 同心县| 河北省| 青河县| 宜君县| 阿荣旗|