Ошибка JSON.net после импорта сервисов XBox Live

Я добавил в свой проект пакет ресурсов XBox Live Unity и Я получаю эту ошибку в Unity. Странным образом это не отображается в Visual Studio, но мешает мне запустить мое приложение.

error CS7069: Reference to type `System.ComponentModel.INotifyPropertyChanging' claims it is defined assembly `System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', but it could not be found

Строка, на которую ссылается ошибка, выглядит следующим образом

JObject response = JsonConvert.DeserializeObject( request.text ) as JObject;

request — это объект Unity WWW. Я использовал этот пакет активов в своем приложении, но я удалили его, так как похоже, что XBox Live уже включает в себя предварительно скомпилированную DLL?


person Real World    schedule 03.03.2017    source источник
comment
Ах да... Это хлопотно. В какой-то момент я тоже это получил, я думаю, что просто полностью удалил json.net и снова импортировал его. Причина в том, что при импорте Xbox live unity asset package Unity перезаписывает ваш (я полагаю) пользовательский импорт json.net. Если мне когда-нибудь понадобится сериализация json, я бы использовал встроенную JsonUtility, а не хлопоты, связанные с реализацией внешней библиотеки С#, официально не поддерживаемой Unity. Это работает, но Unity плохо с этим справляется.   -  person Fredrik Schön    schedule 03.03.2017


Ответы (2)


Итак, похоже, проблема в JObject. Переход на JContainer решает проблему без дальнейших изменений кода.

person Real World    schedule 03.03.2017

Класс JObject определен в Json.NET как:

public partial class JObject : JContainer, IDictionary<string, JToken>, INotifyPropertyChanged

в то время как JContainer определяется как:

public abstract partial class JContainer : JToken, IList<JToken>

Когда вы используете JObject, Unity ожидает, что сможет найти реализацию INotifyPropertyChanged, которую, похоже, не может найти.

Мое первое предположение заключалось в том, что этого класса не существовало в подмножестве .NET 2.0, но я проверил (в Unity 5.5), что он доступен. Не могли бы вы предоставить более подробную информацию и сообщить мне, какую версию Unity вы используете?

person Ben Randall    schedule 13.03.2017
comment
Спасибо за ответ. Я строю с Unity 5.5.2, но JObject работал до того, как я импортировал пакет активов XBox. Что-то в этом пакете должно включать другую версию библиотеки из пакета активов JSON.net, на который я ссылался в OP. - person Real World; 14.03.2017
comment
Знаете ли вы, какой другой пакет, который вы могли использовать, мог вызвать проблему? Мне было бы интересно посмотреть, смогу ли я точно определить, что вызвало проблему, чтобы мы могли задокументировать ее или обойти ее. - person Ben Randall; 21.03.2017
comment
Насколько мне известно, этот assetstore.unity3d.com/en/# !/содержание/11347 - person Real World; 22.03.2017
comment
Ах да, я рассматривал возможность использования этой библиотеки, но, поскольку мы, очевидно, не можем зависеть от платного актива Unity, мы пока используем только Json.NET (да, я понимаю, что с этим есть некоторые проблемы). Надеюсь, подобные конфликты не будут возникать слишком часто. Вы СЛЕДУЕТ создать библиотеки SDK самостоятельно со ссылкой на эту версию Json.NET, если это необходимо. - person Ben Randall; 26.03.2017