我正在尝试将Mongodb中的数据反序列化为由protoc(版本3)创建的MyClass。
我正在使用MongoDB.Driver(版本4) BsonSerializer.Deserialize(result,MyClass.GetType()); 它使用XmlSerializer反序列化数据。
问题在于protobuf如何代表其馆藏。 列表创建为Google.Protobuf.Collections.RepeatedField 没有setter 。 XmlSerializer无法反序列化没有setter的字段。 如何以一种不会成为丑陋黑客的方式来解决这个问题呢?
我提出的选项:
选项1似乎令人生畏,选项2让我创建一个新的分支,这是一个难以维护。选项3是迄今为止最简单的,但也是凌乱的,如果有更好的方法来解决这个问题,我不想创建另一层复杂性。
所以我的问题是:
还有其他方法可以解决这个问题吗?我有什么遗失已经内置的,或者我错过了一些微不足道的事情吗?
编辑: 这是protoc verison 3生成的内容的片段:
/// <summary>Field number for the "Recipients" field.</summary>
public const int RecipientsFieldNumber = 5;
private static readonly pb::FieldCodec<string> _repeated_recipients_codec =
pb::FieldCodec.ForString(42);
private readonly pbc::RepeatedField<string> recipients_ = new pbc::RepeatedField<string>();
public pbc::RepeatedField<string> Recipients {
get { return recipients_; }
}
它来自这个原型文件:
syntax = "proto3";
package DataModels.Data;
message MailTemplateMessage {
string UUID = 1;
string SubjectLine = 2;
string Body = 3;
string Sender = 4;
repeated string Recipients = 5;
}