mirror of
https://github.com/milimoe/FunGame-Testing.git
synced 2025-12-05 16:16:36 +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.Collections;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Text.Json;
|
using ConverterExample;
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
using Milimoe.FunGame.Core.Api.Utility;
|
using Milimoe.FunGame.Core.Api.Utility;
|
||||||
using Milimoe.FunGame.Core.Entity;
|
using Milimoe.FunGame.Core.Entity;
|
||||||
using Milimoe.FunGame.Core.Library.Common.JsonConverter;
|
using Milimoe.FunGame.Core.Library.Common.JsonConverter;
|
||||||
@ -25,15 +24,15 @@ table.Rows.Add(2, "Jane", 25);
|
|||||||
table.Rows.Add(3, "Bob", 40);
|
table.Rows.Add(3, "Bob", 40);
|
||||||
ds.Tables.Add(table);
|
ds.Tables.Add(table);
|
||||||
|
|
||||||
JsonSerializerOptions options = new()
|
System.Text.Json.JsonSerializerOptions options = new()
|
||||||
{
|
{
|
||||||
WriteIndented = true,
|
WriteIndented = true,
|
||||||
ReferenceHandler = ReferenceHandler.IgnoreCycles,
|
ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles,
|
||||||
Converters = { new DateTimeConverter(), new DataTableConverter(), new DataSetConverter(), new UserConverter(), new RoomConverter() }
|
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);
|
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()
|
Hashtable hashtable = new()
|
||||||
{
|
{
|
||||||
@ -42,11 +41,28 @@ Hashtable hashtable = new()
|
|||||||
{ "user", u }
|
{ "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();
|
User u2 = NetworkUtility.JsonDeserializeFromHashtable<User>(hashtable2, "user") ?? Factory.GetUser();
|
||||||
Room r2 = NetworkUtility.JsonDeserializeFromHashtable<Room>(hashtable2, "room") ?? Factory.GetRoom();
|
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;
|
||||||
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 class Person
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; } = "";
|
||||||
public int Age { get; set; }
|
public int Age { get; set; }
|
||||||
public Address Address { get; set; }
|
public Address Address { get; set; } = new();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Address
|
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;
|
result ??= new();
|
||||||
int age = 0;
|
switch (propertyName)
|
||||||
Address address = null;
|
{
|
||||||
|
case "city":
|
||||||
|
result.City = reader.GetString() ?? "";
|
||||||
|
break;
|
||||||
|
|
||||||
while (reader.Read())
|
case "state":
|
||||||
{
|
result.State = reader.GetString() ?? "";
|
||||||
if (reader.TokenType == JsonTokenType.EndObject)
|
|
||||||
{
|
|
||||||
break;
|
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)
|
switch (propertyName)
|
||||||
{
|
{
|
||||||
case "name":
|
case "name":
|
||||||
name = reader.GetString();
|
result.Name = reader.GetString() ?? "";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "age":
|
case "age":
|
||||||
age = reader.GetInt32();
|
result.Age = reader.GetInt32();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "address":
|
case "address":
|
||||||
address = JsonSerializer.Deserialize<Address>(ref reader, options);
|
result.Address = NetworkUtility.JsonDeserialize<Address>(reader.GetString() ?? "", options) ?? new Address();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return new Person { Name = name, Age = age, Address = address };
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Write(Utf8JsonWriter writer, Person value, JsonSerializerOptions options)
|
public override void Write(Utf8JsonWriter writer, Person value, JsonSerializerOptions options)
|
||||||
{
|
{
|
||||||
@ -80,9 +72,7 @@ namespace ConsoleApp1
|
|||||||
|
|
||||||
writer.WriteString("name", value.Name);
|
writer.WriteString("name", value.Name);
|
||||||
writer.WriteNumber("age", value.Age);
|
writer.WriteNumber("age", value.Age);
|
||||||
|
writer.WriteString("address", NetworkUtility.JsonSerialize(value.Address, options));
|
||||||
writer.WritePropertyName("address");
|
|
||||||
JsonSerializer.Serialize(writer, value.Address, options);
|
|
||||||
|
|
||||||
writer.WriteEndObject();
|
writer.WriteEndObject();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user