Я потратил более 10 часов на изучение этой проблемы, и на данный момент я чувствую, что это ошибка.
Вот настройки:
У меня есть приложение-функция MyFunctionApp.csproj
, которое ссылается на проект MyDataContracts.csproj
, который мне нужно использовать для сериализации / десериализации сообщений.
В настоящее время я использую Json.net для сериализации / десериализации.
Я могу продемонстрировать, что существуют проблемы при попытке десериализации JSON для типа в MyDataContracts
, хотя я могу продемонстрировать, что MyDataContracts.dll
загружен:
// MyClass is from MyDataContracts
MyClass instance = new MyClass(); // good so far … interesting ...
Type type = instance.GetType();
Assembly assembly = type.Assembly;
log.Info($"Type {type} comes from assembly '{assembly.FullName}', location = '{assembly.Location}'");
// 2018-06-28T14:39:40.630 [Info] Instance of MyDataContracts.MyClass comes from assembly MyDataContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', location = 'D:\local\Temporary ASP.NET Files\root\48e7c30a\5fd0f557\assembly\dl3\9681789a\c5d216c9_9f0ed401\MyDataContracts.dll'
string json = JsonConvert.SerializeObject(type, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
ypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
});
log.Info($"Successfully serialized the {type.GetType()}");
// Successfully serialized the System.RuntimeType
log.Info(json);
// "MyDataContracts.MyClass, MyDataContracts, Version=10.0.0, Culture=neutral, PublicKeyToken=null"
// BOOM! This won't work.
type = JsonConvert.DeserializeObject<Type>(json, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
});
// 2018-06-28T14:39:40.689 [Info] Newtonsoft.Json.JsonSerializationException
// 2018-06-28T14:39:40.689 [Info] Error converting value "MyDataContracts.MyClass, MyDataContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" to type 'System.Type'. Path '', line 1, position 102.