mirror of
https://github.com/milimoe/FunGame-Testing.git
synced 2025-12-05 08:09:04 +00:00
BaseEntityConverter的示例代码
This commit is contained in:
parent
dccedd3546
commit
040a5cd922
34
Main.cs
34
Main.cs
@ -1,7 +1,6 @@
|
||||
using System.Collections;
|
||||
using System.Data;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using ConverterExample;
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.JsonConverter;
|
||||
@ -25,15 +24,15 @@ table.Rows.Add(2, "Jane", 25);
|
||||
table.Rows.Add(3, "Bob", 40);
|
||||
ds.Tables.Add(table);
|
||||
|
||||
JsonSerializerOptions options = new()
|
||||
System.Text.Json.JsonSerializerOptions options = new()
|
||||
{
|
||||
WriteIndented = true,
|
||||
ReferenceHandler = ReferenceHandler.IgnoreCycles,
|
||||
Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter() }
|
||||
ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles,
|
||||
Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter(), new PersonConverter(), new AddressConverter() }
|
||||
};
|
||||
|
||||
Room r = Factory.GetRoom(1294367, "w5rtvh8".ToUpper(), DateTime.Now, Factory.GetUser(), Milimoe.FunGame.Core.Library.Constant.RoomType.Mix, Milimoe.FunGame.Core.Library.Constant.RoomState.Created);
|
||||
User u = Factory.GetUser(1, "LUOLI", "123123", DateTime.Now, DateTime.Now, "LUOLI@66.COM", "QWQAQW");
|
||||
User u = Factory.GetUser(1, "LUOLI", DateTime.Now, DateTime.Now, "LUOLI@66.COM", "QWQAQW");
|
||||
|
||||
Hashtable hashtable = new()
|
||||
{
|
||||
@ -42,11 +41,28 @@ Hashtable hashtable = new()
|
||||
{ "user", u }
|
||||
};
|
||||
|
||||
string json = JsonSerializer.Serialize(hashtable, options);
|
||||
string json = NetworkUtility.JsonSerialize(hashtable, options);
|
||||
|
||||
Hashtable hashtable2 = JsonSerializer.Deserialize<Hashtable>(json, options) ?? new();
|
||||
Hashtable hashtable2 = NetworkUtility.JsonDeserialize<Hashtable>(json, options) ?? new();
|
||||
|
||||
User u2 = NetworkUtility.JsonDeserializeFromHashtable<User>(hashtable2, "user") ?? Factory.GetUser();
|
||||
Room r2 = NetworkUtility.JsonDeserializeFromHashtable<Room>(hashtable2, "room") ?? Factory.GetRoom();
|
||||
|
||||
System.Console.WriteLine(u2.Username + " 进入了 " + r2.Roomid + " 房间");
|
||||
Console.WriteLine(u2.Username + " 进入了 " + r2.Roomid + " 房间");
|
||||
|
||||
Person p = new()
|
||||
{
|
||||
Age = (int)r2.Id,
|
||||
Name = u2.Username,
|
||||
Address = new()
|
||||
{
|
||||
State = "呵呵州(Hehe State)",
|
||||
City = "哈哈市(Haha City)"
|
||||
}
|
||||
};
|
||||
|
||||
json = NetworkUtility.JsonSerialize(p, options);
|
||||
|
||||
Person p2 = NetworkUtility.JsonDeserialize<Person>(json, options) ?? new();
|
||||
|
||||
Console.WriteLine("My name is " + p2.Name + ", I am " + p2.Age + "-year-old. I live at " + p2.Address.State + " " + p2.Address.City);
|
||||
@ -1,78 +1,70 @@
|
||||
using System;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Library.Common.Architecture;
|
||||
|
||||
namespace ConsoleApp1
|
||||
namespace ConverterExample
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
string jsonString = @"{""name"": ""John"", ""age"": 30, ""address"": {""city"": ""New York"", ""state"": ""NY""}}";
|
||||
|
||||
var options = new JsonSerializerOptions();
|
||||
options.Converters.Add(new PersonConverter());
|
||||
|
||||
var person = JsonSerializer.Deserialize<Person>(jsonString, options);
|
||||
|
||||
Console.WriteLine(person.Name);
|
||||
Console.WriteLine(person.Age);
|
||||
Console.WriteLine(person.Address.City);
|
||||
Console.WriteLine(person.Address.State);
|
||||
}
|
||||
}
|
||||
|
||||
public class Person
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Name { get; set; } = "";
|
||||
public int Age { get; set; }
|
||||
public Address Address { get; set; }
|
||||
public Address Address { get; set; } = new();
|
||||
}
|
||||
|
||||
public class Address
|
||||
{
|
||||
public string City { get; set; }
|
||||
public string State { get; set; }
|
||||
public string State { get; set; } = "";
|
||||
public string City { get; set; } = "";
|
||||
}
|
||||
|
||||
public class PersonConverter : JsonConverter<Person>
|
||||
public class AddressConverter : BaseEntityConverter<Address>
|
||||
{
|
||||
public override Person Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
public override void ReadPropertyName(ref Utf8JsonReader reader, string propertyName, JsonSerializerOptions options, ref Address? result)
|
||||
{
|
||||
string name = null;
|
||||
int age = 0;
|
||||
Address address = null;
|
||||
result ??= new();
|
||||
switch (propertyName)
|
||||
{
|
||||
case "city":
|
||||
result.City = reader.GetString() ?? "";
|
||||
break;
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.TokenType == JsonTokenType.EndObject)
|
||||
{
|
||||
case "state":
|
||||
result.State = reader.GetString() ?? "";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (reader.TokenType == JsonTokenType.PropertyName)
|
||||
public override void Write(Utf8JsonWriter writer, Address value, JsonSerializerOptions options)
|
||||
{
|
||||
string propertyName = reader.GetString();
|
||||
writer.WriteStartObject();
|
||||
|
||||
writer.WriteString("state", value.State);
|
||||
writer.WriteString("city", value.City);
|
||||
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
}
|
||||
|
||||
public class PersonConverter : BaseEntityConverter<Person>
|
||||
{
|
||||
public override void ReadPropertyName(ref Utf8JsonReader reader, string propertyName, JsonSerializerOptions options, ref Person? result)
|
||||
{
|
||||
result ??= new();
|
||||
switch (propertyName)
|
||||
{
|
||||
case "name":
|
||||
name = reader.GetString();
|
||||
result.Name = reader.GetString() ?? "";
|
||||
break;
|
||||
|
||||
case "age":
|
||||
age = reader.GetInt32();
|
||||
result.Age = reader.GetInt32();
|
||||
break;
|
||||
|
||||
case "address":
|
||||
address = JsonSerializer.Deserialize<Address>(ref reader, options);
|
||||
result.Address = NetworkUtility.JsonDeserialize<Address>(reader.GetString() ?? "", options) ?? new Address();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new Person { Name = name, Age = age, Address = address };
|
||||
}
|
||||
|
||||
public override void Write(Utf8JsonWriter writer, Person value, JsonSerializerOptions options)
|
||||
{
|
||||
@ -80,9 +72,7 @@ namespace ConsoleApp1
|
||||
|
||||
writer.WriteString("name", value.Name);
|
||||
writer.WriteNumber("age", value.Age);
|
||||
|
||||
writer.WritePropertyName("address");
|
||||
JsonSerializer.Serialize(writer, value.Address, options);
|
||||
writer.WriteString("address", NetworkUtility.JsonSerialize(value.Address, options));
|
||||
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user