移除对Newtonsoft.Jon的依赖

This commit is contained in:
sin365 2025-03-07 16:49:07 +08:00
parent eb19e99ac2
commit bedbc4daa1
10 changed files with 457 additions and 172 deletions

View File

@ -1,7 +1,6 @@
using Essgee.Emulation.Cartridges.Nintendo;
using Essgee.Emulation.ExtDevices.Nintendo;
using Essgee.Utilities;
using Newtonsoft.Json;
using System;
namespace Essgee.Emulation.Configuration
@ -26,7 +25,7 @@ namespace Essgee.Emulation.Configuration
//todo Unity [FileBrowserControl("General", "Bootstrap Path", "Game Boy Bootstrap ROM (*.gb;*.bin;*.zip)|*.gb;*.bin;*.zip")]
public string BootstrapRom { get; set; }
//todo Unity [DropDownControl("General", "Serial Device", typeof(ISerialDevice))]
[JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.ExtDevices.Nintendo")]
//[JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.ExtDevices.Nintendo")]
public Type SerialDevice { get; set; }
//todo Unity [DropDownControl("GB Camera", "Camera Source", typeof(GBCameraCartridge.ImageSources))]

View File

@ -1,7 +1,6 @@
using Essgee.Emulation.Cartridges.Nintendo;
using Essgee.Emulation.ExtDevices.Nintendo;
using Essgee.Utilities;
using Newtonsoft.Json;
using System;
namespace Essgee.Emulation.Configuration
@ -15,7 +14,7 @@ namespace Essgee.Emulation.Configuration
//todo Unity [FileBrowserControl("General", "Bootstrap Path", "Game Boy Color Bootstrap ROM (*.gbc;*.bin;*.zip)|*.gbc;*.bin;*.zip")]
public string BootstrapRom { get; set; }
//todo Unity [DropDownControl("General", "Serial Device", typeof(ISerialDevice))]
[JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.ExtDevices.Nintendo")]
//[JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.ExtDevices.Nintendo")]
public Type SerialDevice { get; set; }
//todo Unity [DropDownControl("GB Camera", "Camera Source", typeof(GBCameraCartridge.ImageSources))]

View File

@ -1,34 +1,33 @@
using Newtonsoft.Json;
using System.IO;
//using System.IO;
namespace Essgee.Extensions
{
public static class SerializationExtensionMethods
{
public static void SerializeToFile(this object obj, string jsonFileName)
{
SerializeToFile(obj, jsonFileName, new JsonSerializerSettings());
}
//namespace Essgee.Extensions
//{
// public static class SerializationExtensionMethods
// {
// public static void SerializeToFile(this object obj, string jsonFileName)
// {
// SerializeToFile(obj, jsonFileName, new JsonSerializerSettings());
// }
static void SerializeToFile(this object obj, string jsonFileName, JsonSerializerSettings serializerSettings)
{
using (var writer = new StreamWriter(jsonFileName))
{
writer.Write(JsonConvert.SerializeObject(obj, Formatting.Indented, serializerSettings));
}
}
// static void SerializeToFile(this object obj, string jsonFileName, JsonSerializerSettings serializerSettings)
// {
// using (var writer = new StreamWriter(jsonFileName))
// {
// writer.Write(JsonConvert.SerializeObject(obj, Formatting.Indented, serializerSettings));
// }
// }
public static T DeserializeFromFile<T>(this string jsonFileName)
{
using (var reader = new StreamReader(jsonFileName))
{
return (T)JsonConvert.DeserializeObject(reader.ReadToEnd(), typeof(T), new JsonSerializerSettings() { Formatting = Formatting.Indented });
}
}
// public static T DeserializeFromFile<T>(this string jsonFileName)
// {
// using (var reader = new StreamReader(jsonFileName))
// {
// return (T)JsonConvert.DeserializeObject(reader.ReadToEnd(), typeof(T), new JsonSerializerSettings() { Formatting = Formatting.Indented });
// }
// }
public static T DeserializeObject<T>(this string jsonString)
{
return (T)JsonConvert.DeserializeObject(jsonString, typeof(T), new JsonSerializerSettings() { Formatting = Formatting.Indented });
}
}
}
// public static T DeserializeObject<T>(this string jsonString)
// {
// return (T)JsonConvert.DeserializeObject(jsonString, typeof(T), new JsonSerializerSettings() { Formatting = Formatting.Indented });
// }
// }
//}

View File

@ -1,14 +1,11 @@
using Essgee.Emulation;
using Essgee.Exceptions;
using Essgee.Utilities;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Xml.Serialization;
using UnityEngine.Timeline;
namespace Essgee.Metadata
{
@ -37,11 +34,305 @@ namespace Essgee.Metadata
{
gameMetaReources = metaresources;
if (!gameMetaReources.GetCartMetadataDatabase(out string loadedData))
throw new HandlerException("CartMetadataDatabase file not found");
cartMetadataDatabase = JsonConvert.DeserializeObject<List<CartridgeJSON>>(loadedData);
//if (!gameMetaReources.GetCartMetadataDatabase(out string loadedData))
// throw new HandlerException("CartMetadataDatabase file not found");
//cartMetadataDatabase = JsonConvert.DeserializeObject<List<CartridgeJSON>>(loadedData);
cartMetadataDatabase = new List<CartridgeJSON>()
{
new CartridgeJSON(){
Name = "The Castle (SG-1000)",
Notes = "8k volatile RAM",
Crc32 = 0x092F29D6,
RomSize = 32768,
RamSize = 8192
},
new CartridgeJSON(){
Name = "Othello (SG-1000)",
Notes = "2k volatile RAM",
Crc32 = 0xAF4F14BC,
RomSize = 32768,
RamSize = 2048
},
new CartridgeJSON(){
Name = "Sega Basic Level II (SC-3000)",
Notes = "2k volatile RAM (for Level IIb)",
Crc32 = 0xF691F9C7,
RomSize = 32768,
RamSize = 2048
},
new CartridgeJSON(){
Name = "Sega Basic Level III (SC-3000)",
Notes = "32k volatile RAM (for Level IIIb)",
Crc32 = 0x5D9F11CA,
RomSize = 32768,
RamSize = 32768
},
new CartridgeJSON(){
Name = "Back to the Future 2 (SMS)",
Notes = "PAL only",
Crc32 = 0xE5FF50D8,
RomSize = 262144,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Back to the Future 3 (SMS)",
Notes = "PAL only",
Crc32 = 0x2D48C1D3,
RomSize = 262144,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "California Games 2 (SMS, Europe)",
Notes = "PAL only",
Crc32 = 0xC0E25D62,
RomSize = 262144,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Chase HQ (SMS)",
Notes = "PAL only",
Crc32 = 0x85CFC9C9,
RomSize = 262144,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Cosmic Spacehead (SMS)",
Notes = "Codemasters mapper & PAL only",
Crc32 = 0x29822980,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Dinobasher (SMS)",
Notes = "Codemasters mapper",
Crc32 = 0xEA5C3A6F,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Excellent Dizzy Collection (SMS)",
Notes = "Codemasters mapper & PAL only",
Crc32 = 0x8813514B,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Fantastic Dizzy (SMS)",
Notes = "Codemasters mapper & PAL only",
Crc32 = 0xB9664AE1,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Home Alone (SMS)",
Notes = "PAL only",
Crc32 = 0xC9DBF936,
RomSize = 262144,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Micro Machines (SMS)",
Notes = "Codemasters mapper & PAL only",
Crc32 = 0xA577CE46,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "NewZealand Story (SMS)",
Notes = "PAL only",
Crc32 = 0xC660FF34,
RomSize = 262144,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Power Strike 2 (SMS)",
Notes = "PAL only",
Crc32 = 0xA109A6FE,
RomSize = 524288,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Predator 2 (SMS, Europe)",
Notes = "PAL only",
Crc32 = 0x0047B615,
RomSize = 262144,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Sonic the Hedgehog 2 (SMS)",
Notes = "PAL only",
Crc32 = 0x5B3B922C,
RomSize = 524288,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Sonic the Hedgehog 2 (SMS, Revision 1)",
Notes = "PAL only",
Crc32 = 0xD6F2BFCA,
RomSize = 524288,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Space Harrier (SMS, Europe)",
Notes = "PAL only",
Crc32 = 0xCA1D3752,
RomSize = 262144,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "CJ Elephant Fugitive (GG)",
Notes = "Codemasters mapper",
Crc32 = 0x72981057,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Cosmic Spacehead (GG)",
Notes = "Codemasters mapper",
Crc32 = 0x6CAA625B,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Dropzone (GG)",
Notes = "Codemasters mapper",
Crc32 = 0x152F0DCC,
RomSize = 131072,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Ernie Els Golf (GG)",
Notes = "Codemasters mapper & 8k volatile RAM",
Crc32 = 0x5E53C7F7,
RomSize = 262144,
RamSize = 8192,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Micro Machines (GG)",
Notes = "Codemasters mapper",
Crc32 = 0xF7C524F6,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Micro Machines 2: Turbo Tournament (GG)",
Notes = "Codemasters mapper",
Crc32 = 0xDBE8895C,
RomSize = 524288,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Pete Sampras Tennis (GG)",
Notes = "Codemasters mapper",
Crc32 = 0xC1756BEE,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Pop Breaker (GG, Japan)",
Notes = "Domestic/Japan only",
Crc32 = 0x71DEBA5A,
RomSize = 131072,
PreferredRegion = Region.Domestic
},
new CartridgeJSON(){
Name = "S.S. Lucifer: Man Overboard (GG)",
Notes = "Codemasters mapper",
Crc32 = 0xD9A7F170,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge),
},
new CartridgeJSON(){
Name = "Sonic Chaos (SMS, Jun 30 1993 Prototype)",
Notes = "Disallow memory control",
Crc32 = 0xD3AD67FA,
RomSize = 524288,
AllowMemoryControl = false
},
new CartridgeJSON(){
Name = "94 Super World Cup Soccer (SMS)",
Notes = "Korean mapper",
Crc32 = 0x060D6A7C,
RomSize = 262144,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMapperCartridge),
},
new CartridgeJSON(){
Name = "Jang Pung II (SMS)",
Notes = "Korean mapper",
Crc32 = 0x929222C4,
RomSize = 524288,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMapperCartridge),
},
new CartridgeJSON(){
Name = "Jang Pung 3 (SMS)",
Notes = "Korean mapper",
Crc32 = 0x18FB98A3,
RomSize = 1048576,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMapperCartridge),
},
new CartridgeJSON(){
Name = "Janggun-ui Adeul (SMS)",
Notes = "Korean sprite-flip mapper",
Crc32 = 0x192949D5,
RomSize = 524288,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanSpriteMapperCartridge),
},
new CartridgeJSON(){
Name = "Sangokushi 3 (SMS)",
Notes = "Korean mapper",
Crc32 = 0x97D03541,
RomSize = 1048576,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMapperCartridge),
},
new CartridgeJSON(){
Name = "4 Pak All Action (SMS)",
Notes = "4 Pak mapper",
Crc32 = 0xA67F2A5C,
RomSize = 1048576,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.Multicart4PakAllActionCartridge),
},
new CartridgeJSON(){
Name = "Cyborg Z (SMS)",
Notes = "Korean MSX 8k mapper",
Crc32 = 0x77EFE84A,
RomSize = 131072,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMSX8kMapperCartridge),
},
new CartridgeJSON(){
Name = "Street Master (SMS)",
Notes = "Korean MSX 8k mapper",
Crc32 = 0x83F0EEDE,
RomSize = 131072,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMSX8kMapperCartridge),
},
new CartridgeJSON(){
Name = "Wonsiin (SMS)",
Notes = "Korean MSX 8k mapper",
Crc32 = 0xA05258F5,
RomSize = 131072,
Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMSX8kMapperCartridge),
},
new CartridgeJSON(){
Name = "SMS Bad Apple 1.00 (SMS)",
Notes = "PAL only",
Crc32 = 0x38434560,
RomSize = 4194304,
PreferredTVStandard = TVStandard.PAL
},
new CartridgeJSON(){
Name = "Be No Sqr 1.01 (SMS)",
Notes = "PAL only",
Crc32 = 0xEE701BE6,
RomSize = 524288,
PreferredTVStandard = TVStandard.PAL
}
};
//改为接口直接读取
//XmlRootAttribute root;
@ -126,34 +417,34 @@ namespace Essgee.Metadata
public class CartridgeJSON
{
[JsonProperty(Required = Required.Always)]
//[JsonProperty(Required = Required.Always)]
public string Name { get; set; } = string.Empty;
[JsonProperty(Required = Required.Always)]
//[JsonProperty(Required = Required.Always)]
public string Notes { get; set; } = string.Empty;
[JsonProperty(Required = Required.Always), JsonConverter(typeof(HexadecimalJsonConverter))]
//[JsonProperty(Required = Required.Always), JsonConverter(typeof(HexadecimalJsonConverter))]
public uint Crc32 { get; set; } = 0xFFFFFFFF;
[JsonProperty(Required = Required.Always)]
//[JsonProperty(Required = Required.Always)]
public int RomSize { get; set; } = 0;
[JsonProperty(Required = Required.Default), DefaultValue(0)]
//[JsonProperty(Required = Required.Default), DefaultValue(0)]
public int RamSize { get; set; } = 0;
[JsonProperty(Required = Required.Default), JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.Cartridges"), DefaultValue(null)]
//[JsonProperty(Required = Required.Default), JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.Cartridges"), DefaultValue(null)]
public Type Mapper { get; set; } = null;
[JsonProperty(Required = Required.Default), DefaultValue(false)]
//[JsonProperty(Required = Required.Default), DefaultValue(false)]
public bool HasNonVolatileRam { get; set; } = false;
[JsonProperty(Required = Required.Default), JsonConverter(typeof(StringEnumConverter)), DefaultValue(TVStandard.Auto)]
//[JsonProperty(Required = Required.Default), JsonConverter(typeof(StringEnumConverter)), DefaultValue(TVStandard.Auto)]
public TVStandard PreferredTVStandard { get; set; } = TVStandard.Auto;
[JsonProperty(Required = Required.Default), JsonConverter(typeof(StringEnumConverter)), DefaultValue(Region.Auto)]
//[JsonProperty(Required = Required.Default), JsonConverter(typeof(StringEnumConverter)), DefaultValue(Region.Auto)]
public Region PreferredRegion { get; set; } = Region.Auto;
[JsonProperty(Required = Required.Default), DefaultValue(true)]
//[JsonProperty(Required = Required.Default), DefaultValue(true)]
public bool AllowMemoryControl { get; set; } = true;
}

View File

@ -1,47 +1,47 @@
using Newtonsoft.Json;
using System;
//using Newtonsoft.Json;
//using System;
namespace Essgee.Utilities
{
public class HexadecimalJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
// TODO: maybe actually check things?
return true;
}
//namespace Essgee.Utilities
//{
// public class HexadecimalJsonConverter : JsonConverter
// {
// public override bool CanConvert(Type objectType)
// {
// // TODO: maybe actually check things?
// return true;
// }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
switch (Type.GetTypeCode(value.GetType()))
{
case TypeCode.Byte:
case TypeCode.SByte:
writer.WriteValue($"0x{value:X2}");
break;
case TypeCode.UInt16:
case TypeCode.Int16:
writer.WriteValue($"0x{value:X4}");
break;
case TypeCode.UInt32:
case TypeCode.Int32:
writer.WriteValue($"0x{value:X8}");
break;
case TypeCode.UInt64:
case TypeCode.Int64:
writer.WriteValue($"0x{value:X16}");
break;
default:
throw new JsonSerializationException();
}
}
// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
// {
// switch (Type.GetTypeCode(value.GetType()))
// {
// case TypeCode.Byte:
// case TypeCode.SByte:
// writer.WriteValue($"0x{value:X2}");
// break;
// case TypeCode.UInt16:
// case TypeCode.Int16:
// writer.WriteValue($"0x{value:X4}");
// break;
// case TypeCode.UInt32:
// case TypeCode.Int32:
// writer.WriteValue($"0x{value:X8}");
// break;
// case TypeCode.UInt64:
// case TypeCode.Int64:
// writer.WriteValue($"0x{value:X16}");
// break;
// default:
// throw new JsonSerializationException();
// }
// }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if ((reader.Value is string value) && value.StartsWith("0x"))
return Convert.ChangeType(Convert.ToUInt64(value, 16), objectType);
else
throw new JsonSerializationException();
}
}
}
// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
// {
// if ((reader.Value is string value) && value.StartsWith("0x"))
// return Convert.ChangeType(Convert.ToUInt64(value, 16), objectType);
// else
// throw new JsonSerializationException();
// }
// }
//}

View File

@ -1,44 +1,42 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Reflection;
namespace Essgee.Utilities
{
public class InterfaceDictionaryConverter<TInterface> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(TInterface));
}
//namespace Essgee.Utilities
//{
// public class InterfaceDictionaryConverter<TInterface> : JsonConverter
// {
// public override bool CanConvert(Type objectType)
// {
// return (objectType == typeof(TInterface));
// }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (!objectType.IsGenericType || objectType.GetGenericTypeDefinition() != typeof(Dictionary<,>)) throw new InvalidOperationException("Can only deserialize dictionaries");
// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
// {
// if (!objectType.IsGenericType || objectType.GetGenericTypeDefinition() != typeof(Dictionary<,>)) throw new InvalidOperationException("Can only deserialize dictionaries");
var dictionary = (System.Collections.IDictionary)Activator.CreateInstance(objectType);
//不再读取配置
var jObject = JObject.Load(reader);
foreach (var child in jObject.Children())
{
Type type = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(y => typeof(TInterface).IsAssignableFrom(y) && !y.IsInterface && !y.IsAbstract && y.Name == child.Path);
if (type != null)
dictionary.Add(child.Path, JsonConvert.DeserializeObject(child.First.ToString(), type));
}
// var dictionary = (System.Collections.IDictionary)Activator.CreateInstance(objectType);
// //不再读取配置
// var jObject = JObject.Load(reader);
// foreach (var child in jObject.Children())
// {
// Type type = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(y => typeof(TInterface).IsAssignableFrom(y) && !y.IsInterface && !y.IsAbstract && y.Name == child.Path);
// if (type != null)
// dictionary.Add(child.Path, JsonConvert.DeserializeObject(child.First.ToString(), type));
// }
return dictionary;
}
// return dictionary;
// }
public override bool CanWrite
{
get { return false; }
}
// public override bool CanWrite
// {
// get { return false; }
// }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
}
// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
// {
// throw new NotImplementedException();
// }
// }
//}

View File

@ -1,40 +1,40 @@
using Newtonsoft.Json;
using System;
//using Newtonsoft.Json;
//using System;
namespace Essgee.Utilities
{
public class TypeNameJsonConverter : JsonConverter
{
readonly string searchNamespace;
//namespace Essgee.Utilities
//{
// public class TypeNameJsonConverter : JsonConverter
// {
// readonly string searchNamespace;
public TypeNameJsonConverter(string searchNamespace)
{
this.searchNamespace = searchNamespace;
}
// public TypeNameJsonConverter(string searchNamespace)
// {
// this.searchNamespace = searchNamespace;
// }
public override bool CanConvert(Type objectType)
{
// TODO: maybe actually check things?
return true;
}
// public override bool CanConvert(Type objectType)
// {
// // TODO: maybe actually check things?
// return true;
// }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value is Type)
{
var type = (value as Type);
if (type.Namespace != searchNamespace) throw new JsonSerializationException();
writer.WriteValue(type.Name);
}
else
throw new JsonSerializationException();
}
// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
// {
// if (value is Type)
// {
// var type = (value as Type);
// if (type.Namespace != searchNamespace) throw new JsonSerializationException();
// writer.WriteValue(type.Name);
// }
// else
// throw new JsonSerializationException();
// }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var type = Type.GetType($"{searchNamespace}.{reader.Value}");
if (type != null) return type;
else throw new JsonSerializationException();
}
}
}
// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
// {
// var type = Type.GetType($"{searchNamespace}.{reader.Value}");
// if (type != null) return type;
// else throw new JsonSerializationException();
// }
// }
//}

Binary file not shown.

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 1a58e3ab1bbec0a4998d14ae26c5651d

View File

@ -306,7 +306,8 @@ public class Essgeeinit : MonoBehaviour
}
public static void SaveConfiguration()
{
EmuStandInfo.Configuration.SerializeToFile(EmuStandInfo.programConfigPath);
//不需要存储
//EmuStandInfo.Configuration.SerializeToFile(EmuStandInfo.programConfigPath);
}
#endregion