我有一个用.net 4.6.1编写的旧客户端应用程序,它使用WCF服务器的数据。 我正在尝试用ASP.NET Core应用程序和Protobuf序列化替换WCF服务器。 我正在使用图书馆:
尝试在客户端反序列化返回的内容,如下所示:
var resultData = ProtoBuf.Serializer.Deserialize<ExcelDropdownNode>(response.Content.ReadAsStreamAsync().Result);
但是protobuf库出现错误:
无法解析类型:System.String,System.Private.CoreLib,Version = 4.0.0.0,Culture = neutral,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; }
}
答案 0 :(得分:1)
设法通过在客户端添加以下类型解析代码来解决:
RuntimeTypeModel.Default.DynamicTypeFormatting += (sender, args) => {
if (args.FormattedName.Contains("System.String, System.Private.CoreLib"))
{
args.Type = typeof(string);
}};