我有以下代码,试图反序列化一个“属性”类,它基本上是一个名称/值对,其中值的类型是未知的(对象):
[ProtoContract]
[ProtoInclude(100, typeof(ValueAttr))]
public abstract class BaseAttr
{
protected BaseAttr(string name) { _name = name; }
public string Name { get { return _name; } }
public abstract object Value { get; }
public abstract ValueAttr Evaluate();
[ProtoMember(1)]
private readonly string _name;
}
[Serializable]
[ProtoContract]
public class ValueAttr : BaseAttr
{
public ValueAttr(string name, object value) : base(name)
{ _value = value; }
public override ValueAttr Evaluate() { return this; }
public override object Value { get { return _value; } }
[ProtoMember(1, DynamicType = true)]
protected object _value;
}
[Serializable]
public class Attr<T> : ValueAttr
{
public Attr(string name, T value) : base(name, value) { _value = value; }
}
我想要实现的是原生 .NET 类型的 protobuf-net “原生”序列化,以及所有其他类型的默认二进制 .NET 序列化(当然,假设它们是可序列化的)。我认为DynamicType
可以帮助我解决这个问题,直到我发现“动态”部分仅指收缩类型。
什么是最有效的方法(在时间和记忆上)做到这一点?是否使用 protobuf.net 中的ValueWrapper示例?如果是这样,我如何实现默认的 .NET 序列化?
谢谢!