mirror of
https://github.com/milimoe/FunGame-Testing.git
synced 2025-04-21 19:59:34 +08:00
91 lines
2.7 KiB
C#
91 lines
2.7 KiB
C#
using System.Text.Json;
|
|
using Milimoe.FunGame.Core.Api.Utility;
|
|
using Milimoe.FunGame.Core.Library.Common.Architecture;
|
|
|
|
namespace ConverterExample
|
|
{
|
|
public class Person
|
|
{
|
|
public string Name { get; set; } = "";
|
|
public int Age { get; set; }
|
|
public Address Address { get; set; } = new();
|
|
}
|
|
|
|
public class Address
|
|
{
|
|
public string State { get; set; } = "";
|
|
public string City { get; set; } = "";
|
|
}
|
|
|
|
public class AddressConverter : BaseEntityConverter<Address>
|
|
{
|
|
public override Address NewInstance()
|
|
{
|
|
return new();
|
|
}
|
|
|
|
public override void ReadPropertyName(ref Utf8JsonReader reader, string propertyName, JsonSerializerOptions options, ref Address result, Dictionary<string, object> convertingContext)
|
|
{
|
|
result ??= new();
|
|
switch (propertyName)
|
|
{
|
|
case "city":
|
|
result.City = reader.GetString() ?? "";
|
|
break;
|
|
|
|
case "state":
|
|
result.State = reader.GetString() ?? "";
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void Write(Utf8JsonWriter writer, Address value, JsonSerializerOptions options)
|
|
{
|
|
writer.WriteStartObject();
|
|
|
|
writer.WriteString("state", value.State);
|
|
writer.WriteString("city", value.City);
|
|
|
|
writer.WriteEndObject();
|
|
}
|
|
}
|
|
|
|
public class PersonConverter : BaseEntityConverter<Person>
|
|
{
|
|
public override Person NewInstance()
|
|
{
|
|
return new();
|
|
}
|
|
|
|
public override void ReadPropertyName(ref Utf8JsonReader reader, string propertyName, JsonSerializerOptions options, ref Person result, Dictionary<string, object> convertingContext)
|
|
{
|
|
result ??= new();
|
|
switch (propertyName)
|
|
{
|
|
case "name":
|
|
result.Name = reader.GetString() ?? "";
|
|
break;
|
|
|
|
case "age":
|
|
result.Age = reader.GetInt32();
|
|
break;
|
|
|
|
case "address":
|
|
result.Address = NetworkUtility.JsonDeserialize<Address>(reader.GetString() ?? "", options) ?? new Address();
|
|
break;
|
|
}
|
|
}
|
|
|
|
public override void Write(Utf8JsonWriter writer, Person value, JsonSerializerOptions options)
|
|
{
|
|
writer.WriteStartObject();
|
|
|
|
writer.WriteString("name", value.Name);
|
|
writer.WriteNumber("age", value.Age);
|
|
writer.WriteString("address", NetworkUtility.JsonSerialize(value.Address, options));
|
|
|
|
writer.WriteEndObject();
|
|
}
|
|
}
|
|
}
|