123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using Newtonsoft.Json;
- using XGame.Framework.Serialization;
- namespace etoy
- {
- /// <summary>
- /// 序列化用枚举对象
- /// 不能反序列化
- /// </summary>
- class SerializableEnum : ISerializable
- {
- public string fieldType;
- public string fieldName;
- public bool isRepeated;
- public string value;
- public MetadataStruct meta;
- void ISerializable.Deserialize(IReader reader)
- {
- throw new NotImplementedException();
- }
- void ISerializable.Serialize(IWriter writer)
- {
- if (isRepeated)
- {
- int[] enumIntVals = null;
- try
- {
- enumIntVals = JsonConvert.DeserializeObject<int[]>(value);
- }
- catch (Exception ex)
- {
- Console.WriteLine($"枚举数组转int[]失败 Type:{fieldType} Name:{fieldName} Value:{value} Message:{ex.Message}");
- }
- if (enumIntVals == null)
- {
- var enumVals = JsonConvert.DeserializeObject<string[]>(value);
- var count = enumVals?.Length ?? 0;
- enumIntVals = new int[count];
- for (int i = 0; i < count; i++)
- {
- if (!int.TryParse(enumVals[i], out var intVal))
- { // 存的是枚举的名字
- var field = meta.Fields.First(a => a.Name.Equals(enumVals[i], StringComparison.OrdinalIgnoreCase));
- intVal = field?.EnumIntVal ?? 0;
- }
- enumIntVals[i] = intVal;
- }
- }
- writer.Write(enumIntVals);
- }
- else
- {
- if (!int.TryParse(value, out var intVal))
- { // value存的是枚举的名字
- var field = meta.Fields.First(a => a.Name.Equals(value, StringComparison.OrdinalIgnoreCase));
- intVal = field?.EnumIntVal ?? 0;
- }
- writer.Write(intVal);
- }
- }
- }
- }
|