不期望类型,并且不能使用带有protobuf-net的.NET预定义类推断合同

时间:2016-11-24 08:43:38

标签: c# asp.net .net protobuf-net

我的Context包装器类

中有一个System.Globalization.CultureInfo类集合的缓存
public Collection<System.Globalization.CultureInfo> Cultures
{
    get
    {
        // Get the value from Redis cache
    }
    set
    {
        // Save the value into Redis cache
    }
}

可以通过 MyContextWrapper.Current.Cultures 访问它。

使用protobuf-net序列化“Collection Cultures”的值时出现以下错误:

预计不会输入类型,也无法推断合同:System.Globalization.CultureInfo

enter image description here

我知道protobuf-net在课堂上需要[ProtoContract]和[ProtoMember]装饰,但这只适用于自定义用户定义的类。

我如何使用.NET预定义类,例如System.Globalization.CultureInfo。

甚至可以使用protobuf-net?

1 个答案:

答案 0 :(得分:2)

你可以选择代理人。在序列化Collection之前通知protobuf-net。虽然我现在只使用内置文化,但您可以自己扩展它以添加附加数据以完全恢复文化。

示例

将CultureInfo转换为protobuf-net支持类型的代理。

RuntimeTypeModel.Default.Add(typeof(CultureInfo), false).SetSurrogate(typeof(CultureInfoSurrogate));

将它放在程序开头的某处(至少在序列化集合之前):

for /F

如果您还有其他问题,请在评论中告诉我们。