Сериализация Json.NET против Newtonsoft.Json отличается - PullRequest
0 голосов
/ 13 сентября 2018

Я знаю, что в этой теме много похожих вопросов, но я не нашел здесь своего ответа.

Я скачал 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?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...