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
- C# 序列化與反序列化jsonC#JSON
- python 類繼承,對類屬性的改變Python繼承
- java -繼承 -重寫Java繼承
- oop繼承與重寫筆記一OOP繼承筆記
- C# Json 序列化與反序列化一C#JSON
- C# Json 序列化與反序列化二C#JSON
- [譯] 繼承 JavaScript 類中的靜態屬性繼承JavaScript
- 實體類與XML序列化與反序列化XML
- css屬性的可繼承性CSS繼承
- Json串與List、Bean之間的轉換,處理類中List屬性的序列化問題JSONBean
- Java物件的序列化與反序列化-Json篇Java物件JSON
- Fastjson定製屬性的序列化和反序列化ASTJSON
- c#屬性之繼承C#繼承
- JSON 物件序列化、反序列化JSON物件
- python 基礎之繼承、重寫、多繼承Python繼承
- Python中類的JSON序列化PythonJSON
- Java:類與繼承Java繼承
- Python學習——序列化與反序列化-json&picklePythonJSON
- Json 序列化、反序列化;重複或迴圈使用時注意事項JSON
- @JSON(name="members")//使用註釋語法來改變該屬性序列化後的屬性名JSON
- 繼承 基類與派生類繼承
- Json反序列化物件通用工具類JSON物件
- 如何保持json序列化的順序性?JSON
- C#序列化和反序列化(json)C#JSON
- 在C#中實現Json的序列化與反序列化C#JSON
- JSON-B:簡化 JSON 序列化和反序列化JSON
- Java的類與繼承Java繼承
- 類的繼承_子類繼承父類繼承
- JAVA物件導向高階:繼承:許可權修飾符(繼承注意事項) 單繼承 Object類 方法重寫Java物件繼承Object
- C# 實體類序列化與反序列化一 (XmlSerializer)C#XML
- 繼承ActionSupport 實現Action與屬性驅動傳參繼承
- 【Django drf】 序列化類常用欄位類和欄位引數 定製序列化欄位的兩種方式 關係表外來鍵欄位的反序列化儲存 序列化類繼承ModelSerializer 反序列化資料校驗原始碼分析Django繼承原始碼