Не удается разрешить тип: System.String, System.Private.CoreLib, версия 4.0.0.0 - сервер Asp.net Core (.net core 2.1), клиент .NET 4.6.1 - PullRequest
1 голос
/ 31 мая 2019

У меня есть устаревшее клиентское приложение, написанное на .net 4.6.1, которое использует данные сервера WCF.Я пытаюсь заменить сервер WCF приложением ASP.NET Core и сериализацией Protobuf.Я использую библиотеки:

Попытка десериализации возвращаемого содержимого на стороне клиента, как показано ниже:

var resultData = ProtoBuf.Serializer.Deserialize<ExcelDropdownNode>(response.Content.ReadAsStreamAsync().Result);

Но я получаю сообщение об ошибке в библиотеке protobuf:

Невозможно разрешить тип: System.String, System.Private.CoreLib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 7cec85d7bea7798e (вы можете использовать событие TypeModel.DynamicTypeFormatting для предоставления настраиваемого сопоставления)

Есть идеи, что я мог сделать неправильно?

В качестве примечания я должен возвращать динамические данные на сервере, и protobuf не очень этому рад.Я пометил List<object> свойство с DynamicType=True и изменил все ValueTypes на строку (т.е. 4 -> "4").Это позволило сериализации на стороне сервера работать.

Динамическое свойство в ExcelDropDownCode выглядит следующим образом:

[ProtoMember(1, DynamicType = true)]
public List<object> DataItems
{
    get { return dataItems; }
    set { dataItems = value; }
}

1 Ответ

1 голос
/ 31 мая 2019

удалось решить, добавив на стороне клиента приведенный ниже код разрешения типа:

RuntimeTypeModel.Default.DynamicTypeFormatting += (sender, args) => {
if (args.FormattedName.Contains("System.String, System.Private.CoreLib"))
{
    args.Type = typeof(string);
}};
...