tuiwucarrer/Admin.NET/Admin.NET.Core/Extension/ObjectIdConverter.cs

55 lines
1.5 KiB
C#

using MongoDB.Bson;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Admin.NET.Core;
public class ObjectIdConverter : JsonConverter<ObjectId>
{
public override ObjectId ReadJson(JsonReader reader, Type objectType, ObjectId existingValue, bool hasExistingValue, JsonSerializer serializer)
{
if (reader.Value is string value && ObjectId.TryParse(value, out var objectId))
{
return objectId;
}
return existingValue;
}
public override void WriteJson(JsonWriter writer, ObjectId value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString());
}
}
// 自定义 JsonConverter
public class CustomListConverter : JsonConverter<List<string>>
{
public override List<string> ReadJson(JsonReader reader, Type objectType, List<string> existingValue, bool hasExistingValue, JsonSerializer serializer)
{
// 处理空值的情况
if (reader.TokenType == JsonToken.Null)
return new List<string>();
// 使用默认的 List<string> 反序列化
return serializer.Deserialize<List<string>>(reader);
}
public override void WriteJson(JsonWriter writer, List<string> value, JsonSerializer serializer)
{
// 序列化时将空的 List<string> 转换为 null
if (value == null || value.Count == 0)
writer.WriteNull();
else
serializer.Serialize(writer, value);
}
}