JSON繼承JsonConverter序列化與反序列化重寫類屬性
- 首先自定義一個
JSON
類,繼承JsonConverter
,把類的屬性重寫到JSON
中.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GongHuiNewtonsoft.Json;
using GongHuiNewtonsoft.Json.Linq;
namespace JSONDemo
{
public class CustomConverter : JsonConverter
{
private readonly Type[] _types;
public CustomConverter(params Type[] types)
{
this._types = types;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JToken t = JToken.FromObject(value);
if (t.Type != JTokenType.Object)
{
t.WriteTo(writer);
}
else
{
JObject jo = (JObject)t;
IList<string> propertyNameList = jo.Properties().Select(p => p.Name).ToList();
jo.AddFirst(new JProperty("Keys", new JArray(propertyNameList)));
jo.WriteTo(writer);
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException("Unnecessary because CanRead is false.The type will skip the converter.");
}
public override bool CanRead
{
get
{
return false;
}
}
public override bool CanConvert(Type objectType)
{
return _types.Any(t => t == objectType);
}
}
}
- 定義一個City物件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JSONDemo
{
public class City
{
public string Country { get; set; }
public IList<string> Name { get; set; }
public City()
{
this.Name = new List<string>
{
"Auckland",
"Wellington",
"Hamilton"
};
}
}
}
3.序列化與反序列化
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using GongHuiNewtonsoft.Json;
using GongHuiNewtonsoft.Json.Serialization;
using GongHuiNewtonsoft.Json.Converters;
namespace JSONDemo
{
class Program
{
static void Main(string[] args)
{
City city = new City
{
Country = "New Zealand"
};
Console.WriteLine("------------自定義序列化新增物件屬性------------");
string json = JsonConvert.SerializeObject(city, Formatting.Indented, new CustomConverter(typeof(City)));
Console.WriteLine(json);
Console.WriteLine("------------自定義反序列化新增物件屬性------------");
City newCity = JsonConvert.DeserializeObject<City>(json, new CustomConverter(typeof(City)));
Console.WriteLine(newCity.Country);
Console.WriteLine(newCity.Name.Count);
Console.WriteLine(string.Join("/", newCity.Name.ToArray()));
}
}
}
4.執行的結果,注意:序列化City
物件時,新增了Keys
物件的屬性,反序列化時屬性中的值多新增了一次,使得Name
屬性總數量是6
.,而不是3
.
相關文章
- Jaskson精講第7篇-類繼承關係下的JSON序列化與反序列化JsonTypeInfo繼承JSON
- 序列化繼承繼承
- 自定義JsonConverter,反序列化不符合規範的陣列屬性JSON陣列
- css可繼承屬性和非繼承屬性一覽CSS繼承
- Flutter中JSON序列化與反序列化FlutterJSON
- java -繼承 -重寫Java繼承
- [譯] 繼承 JavaScript 類中的靜態屬性繼承JavaScript
- Java物件的序列化與反序列化-Json篇Java物件JSON
- Fastjson定製屬性的序列化和反序列化ASTJSON
- css屬性的可繼承性CSS繼承
- python 基礎之繼承、重寫、多繼承Python繼承
- 實體類與XML序列化與反序列化XML
- Python學習——序列化與反序列化-json&picklePythonJSON
- 屬性序列化自定義與字母表排序-JSON框架Jackson精解第3篇排序JSON框架
- Json反序列化物件通用工具類JSON物件
- JSON-B:簡化 JSON 序列化和反序列化JSON
- 如何保持json序列化的順序性?JSON
- Json 序列化、反序列化;重複或迴圈使用時注意事項JSON
- system.text.Json 針對繼承多型型別的集合,使用自定義Converter,進行json序列化JSON繼承多型型別
- Kotlin Json 序列化KotlinJSON
- JSON.NET與LINQ序列化示例JSON
- Newtonsoft序列化與反序列化json字串使用方法總結JSON字串
- C#序列化和反序列化(json)C#JSON
- 【Django drf】 序列化類常用欄位類和欄位引數 定製序列化欄位的兩種方式 關係表外來鍵欄位的反序列化儲存 序列化類繼承ModelSerializer 反序列化資料校驗原始碼分析Django繼承原始碼
- 繼承 基類與派生類繼承
- json序列化與反序列化 (map,struct, slice, 基本資料型別)JSONStruct資料型別
- 繼承ActionSupport 實現Action與屬性驅動傳參繼承
- 類的繼承_子類繼承父類繼承
- JAVA物件導向高階:繼承:許可權修飾符(繼承注意事項) 單繼承 Object類 方法重寫Java物件繼承Object
- Python中巢狀自定義型別的JSON序列化與反序列化Python巢狀型別JSON
- 詳解電子表格中的json資料:序列化與反序列化JSON
- 類轉詞典 轉json 序列化 魔術方法JSON
- 序列化和反序列化pickle和json 模組JSON
- 類&成員可見性&繼承繼承
- 序列化與反序列化
- 一次 outline 去除經驗(非繼承屬性,看著像繼承)繼承
- ES6 - 類與繼承繼承
- 菱形繼承與虛基類繼承