Я знаю, что в этой теме много похожих вопросов, но я не нашел здесь своего ответа.
Я скачал Json.net
в Unity и Newtonsoft.json
в виде пакета NuGet в другом проекте. Newtonsoft.json
работает, и я попытался использовать это рабочее решение в проекте Unity.
Мне нужно , чтобы использовать ISerializationBinder
для преобразования абстрактной иерархии классов, и я хочу сериализовать / десериализовать имена классов только , а не их полное имя сборки. (Причина этого в том, что код C # должен связываться с другой программой.)
Я использую решение, которое имеет следующий класс для сериализации (скопировано из официального онлайн-примера):
public class KnownTypesBinder : ISerializationBinder
{
public IList<Type> KnownTypes { get; set; }
public Type BindToType(string assemblyName, string typeName)
{
return KnownTypes.SingleOrDefault(t => t.Name == typeName);
}
public void BindToName(Type serializedType, out string assemblyName, out string typeName)
{
assemblyName = null;
typeName = serializedType.Name;
}
}
ISerializationBinder
не существует в Json.net
. JsonSerializerSettings
явно отличается:
Newtonsoft.json
public class JsonSerializerSettings
{
public ISerializationBinder SerializationBinder { get; set; }
}
Json.net
public class JsonSerializerSettings
{
public SerializationBinder Binder { get; set; }
}
System.Runtime.Serialization.SerializationBinder
(не является производным от ISerializationBinder
) не имеет метода с именем public void BindToName(Type serializedType, out string assemblyName, out string typeName)
, что означает, что имя типа не может быть определено.
- Итак, как я могу решить сериализацию - используя только имена классов - в Unity? (Только настройка
TypeNameHandling = TypeNameHandling.Objects,
здесь не является решением)
- Почему все утверждают, что они одинаковы, когда это явно не так? (Даже тег StackOverflow ниже для
Json.net
делает это.)
- Имеет ли разница какое-либо отношение к тому факту, что Unity использует Mono?
Спасибо.