3

这个错误:

Data of this type has inbuilt behaviour, and cannot be added to a model in this way: System.Int64

仅当以下行为 protobuf-net 在序列化具有 TimeStamp 类型的对象时使用的 long 代理类型时才会发生。

RuntimeTypeModel.Default.Add(typeof(TimeStamp),false).SetSurrogate(typeof(long));

TimeStamp 类定义了以下显式运算符:

public static explicit operator TimeStamp( long timeStamp)
{
    return new TimeStamp(timeStamp);
}

public static explicit operator long( TimeStamp TimeStamp)
{
    return TimeStamp.Internal;
}

那么为什么它不接受 long 作为 TimeStamp 的代理类型呢?在开始尝试 protobuf-net 之前,手写序列化在序列化/反序列化时已经使用 long 作为 TimeStamp 的代理项。

4

1 回答 1

0

目前,代理行为期望映射到“消息”类型(在 protobuf 术语中)。能够将其映射到诸如此类的原语long似乎是一种不寻常的情况。我最有可能调整代码以使其工作,但是:简单地说 - 这不是此功能的预期用例,因此它目前不支持(消息和原语在术语上有显着差异存储的内容)。

顺便说一句,取决于你有多少,你可以这样做:

public TimeStamp Foo {get;set;}

[ProtoMember(n)]
private long FooValue {
    get { return (long)Foo; }
    set { Foo = (TimeStamp)value; }
}
于 2012-06-19T06:34:05.960 回答