using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using Serein.Library.Api; namespace Serein.Extend.NewtonsoftJson { public enum JsonType { Default = 0, Web = 1, } /// /// 基于Newtonsoft.Json的IJsonProvider实现 /// public sealed class NewtonsoftJsonProvider : IJsonProvider { private JsonSerializerSettings? settings; /// /// 基于Newtonsoft.Json的JSON门户实现 /// public NewtonsoftJsonProvider() { } /// /// 基于Newtonsoft.Json的JSON门户实现 /// /// public NewtonsoftJsonProvider(JsonType jsonType) { settings = jsonType switch { JsonType.Web => new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), // 控制首字母小写 NullValueHandling = NullValueHandling.Ignore // 可选:忽略 null }, _ => new JsonSerializerSettings { }, }; } public NewtonsoftJsonProvider(JsonSerializerSettings settings) { settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), // 控制首字母小写 NullValueHandling = NullValueHandling.Ignore // 可选:忽略 null }; this.settings = settings; } /// /// 反序列化JSON文本为指定类型的对象。 /// /// /// /// public T? Deserialize(string jsonText) { return JsonConvert.DeserializeObject(jsonText, settings); } /// /// 反序列化JSON文本为指定类型的对象。 /// /// /// /// public object? Deserialize(string jsonText, Type type) { return JsonConvert.DeserializeObject(jsonText, type, settings); } /// /// 序列化对象为JSON文本。 /// /// /// public string Serialize(object obj) { return JsonConvert.SerializeObject(obj, settings); } /// /// 将JSON文本解析为IJsonToken对象。 /// /// /// public IJsonToken Parse(string json) { return NewtonsoftJsonTokenFactory.Parse(json); } /// /// 创建一个新的JSON数组对象。 /// /// /// public IJsonToken CreateObject(IDictionary? values = null) { var jobj = values != null ? JObject.FromObject(values) : new JObject(); return new NewtonsoftJsonObjectToken(jobj); } /// /// 创建一个新的JSON数组。 /// /// /// public IJsonToken CreateArray(IEnumerable? values = null) { var jarr = values != null ? JArray.FromObject(values) : new JArray(); return new NewtonsoftJsonArrayToken(jarr); } /// /// 将对象转换为IJsonToken。 /// /// /// public IJsonToken FromObject(object obj) { var token = JObject.FromObject(obj); return new NewtonsoftJsonObjectToken(token); } } }