我正在使用v2 rev 421. 当我保存protobuf-net生成的流并通过字符串实用程序时,它发现了许多重复的字符串.我说的是应用程序生成的字符串,可以实现,但字符串实习似乎默认情况下不启用. 我
当我保存protobuf-net生成的流并通过字符串实用程序时,它发现了许多重复的字符串.我说的是应用程序生成的字符串,可以实现,但字符串实习似乎默认情况下不启用.
我该如何启用它?
谢谢.
这里有两种不同类型的实习;在反序列化时有实习 – 这始终是启用的,因此如果数据中有重复项,您应该只在托管类中看到一个.NET字符串实例,并根据需要重复使用多次.序列化时也有实习,以避免在序列化时将数据复制到流中.默认情况下不启用,原因很简单,因为protobuf规范中没有定义这样的行为; protobuf-net默认尝试保留在规范内,仅在选择加入的基础上使用扩展.
如果要为protobuf-net = to = protobuf-net使用启用此功能,请为任何给定字符串启用AsReference选项:
[ProtoMember(13, AsReference = true)] public string Foo { get; set; }
这使用了protobuf-net特定于实现的表示.但是,它不会很好地用于互操作目的.如果您需要以可互操作的方式使用它,唯一要做的就是单独存储列表(可能在List< string>某处),并使用数据列表中的位置,即
// this is .... uglier, but probably easier if you need cross-platform public int FooOffset { get { return Foos.IndexOf(Foo); } set { Foo = Foos[value]; } }