Для некоторого дополнительного контекста приложение представляет собой приложение Windows, работающее на архитектуре x64 в качестве плагина для AutoCAD. Мы являемся магазином .NET, поэтому все приложение было написано на C# с использованием ядра .NET, хотя управление версиями платформы не является единообразным во всем репозитории.
Проблема, с которой я столкнулся, заключается в том, что в приложении есть общая функция CloneJson. По какой-то причине этот метод выдает исключение при попытке десериализации одного из наших пользовательских объектов PortMap. Если вы не заметили это в заголовке, эта десериализация происходит с пакетом Newtonsoft.Json.
Вот полный текст ошибки: JsonSerializationException: 'Ошибка преобразования значения "CompanyName.ApplicationName. Common.Objects.Field.Reader, CompanyName.ApplicationName.Common.Objects, Version=1.0.8976.23506, Culture=neutral, PublicKeyToken=null», чтобы ввести «System.Type».
Inner Исключение:
ArgumentException: не удалось привести или преобразовать System.String в System.Type.
Ошибка выдается при вызове JsonConvert.Deserialize в приведенном ниже методе.< /p>
Код: Выделить всё
public static T CloneJson(this T source)
{
if ((object)source == null)
return default(T);
var settings = new Newtonsoft.Json.JsonSerializerSettings()
{
NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace,
TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto
};
var serializedObj = Newtonsoft.Json.JsonConvert.SerializeObject((object)source, settings);
var deserializedOjb = Newtonsoft.Json.JsonConvert.DeserializeObject(serializedObj, settings);
return deserializedOjb;
}
Код: Выделить всё
public class PortMap
{
public List
Ports { get; set; } = new List();
public PortMap(List ports)
{
Ports = ports;
}
public PortMap()
{
}
}
Я также пытался перезагрузить свой ноутбук, потому что у меня было установлено много случайных сред разработки, пакетов и т. д. Я беспокоился, что это может вызвать конфликт, но, похоже, это не имело никакого эффекта.
Некоторые другие важные детали:
- Поскольку проблема может быть воспроизведена только на ПК, на котором ранее не был установлен репозиторий, скорее всего, она связана с изменениями, внесенными командой незадолго до моего присоединения. Одно из этих изменений было связано с зависимостями проекта, что привело к отсутствию зависимостей в новых репозиториях, когда я впервые присоединился. С тех пор я решил эти проблемы, по крайней мере, достаточно хорошо, чтобы приложение можно было построить, но эти зависимости могут быть связаны с этой проблемой.
Подробнее здесь: https://stackoverflow.com/questions/788 ... tion-error