using Newtonsoft.Json; using XGame.Framework.Serialization; namespace etoy { /// /// 序列化用枚举对象 /// 不能反序列化 /// 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(value); } catch (Exception ex) { Console.WriteLine($"枚举数组转int[]失败 Type:{fieldType} Name:{fieldName} Value:{value} Message:{ex.Message}"); } if (enumIntVals == null) { var enumVals = JsonConvert.DeserializeObject(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); } } } }