需求:把實體通過JsonConvert.SerializeObject 轉換為JSON字符串時,默認情況下,字段是什么命名方式,轉換之后的JSON字符串的字段也是什么命名方式顯示的,例如:實體字段是帕斯卡命名法(首字母大寫,其他單詞首字母大寫)BillTitle,轉換后 JSON字符串對應的字段也是 BillTitle,現在在不改變實體字段的前提下,將JSON字符串字段名稱全部轉換為小寫。
解決方案:自定義JSON序列化字段格式 自定義一個ContractResolver類,繼承DefaultContractResolver 重寫里面的 ResolvePropertyName 函數即可
效果如圖所示:
實現代碼:
1、自定義Json序列化字段格式

/// <summary> /// 自定義JSON序列化字段格式 /// </summary> public class LowerContractResolver : DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { return propertyName.ToLower(); } }
2、Json幫助類

public static class JsonHelper { /// <summary> /// 對象轉json字符串 字段名全部小寫 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <returns></returns> public static string ObjToJsonStr<T>(T t) where T : class { JsonSerializerSettings settings = new JsonSerializerSettings() { ContractResolver = new LowerContractResolver() }; return JsonConvert.SerializeObject(t, settings); } /// <summary> /// 對象轉json字符串 默認轉換方式 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <returns></returns> public static string ObjToJsonStrWithDeraultWay<T>(T t) where T : class { return JsonConvert.SerializeObject(t); } }
3、實體對象

public class MyTestItem { public string BillTitle { get; set; } public string BillDetail { get; set; } public string BillSn { get; set; } }
4、函數調用

MyTestItem myTestItem = new MyTestItem() { BillTitle = "Bill 名稱", BillDetail = "Bill 詳情", BillSn = "Bill序列號" }; string defaultFieldJsonString = JsonHelper.ObjToJsonStrWithDeraultWay<MyTestItem>(myTestItem); string lowerFieldJsonString = JsonHelper.ObjToJsonStr<MyTestItem>(myTestItem); Console.WriteLine("================默認轉換================"); Console.WriteLine(defaultFieldJsonString); Console.WriteLine("================字段名小寫轉換================"); Console.WriteLine(lowerFieldJsonString); Console.ReadKey();
寫在最后:JSON字符串轉實體對象,不管字符串的字段是大寫還是小寫都可以轉為實體
寫寫博客,方便自己也方便有需要的人~~