私はprotobuf-netの問題に遭遇し、この最も単純なケースに絞り込みました。クラスが同じタイプのプロパティを持つリンクリストタイプの構造が必要です。これをシリアル化すると、うまく機能します。ただし、タイプがクラスではなくインターフェイスの場合、次のエラーが発生します。ConsoleApplication1.foo(ConsoleApplication1.ifoo)のシリアライザーが生成されると、タイプを変更できません。
これは私がこのエラーを生成しなければならないコードです:
class Program
{
static void Main(string[] args)
{
var toSerialize = new foo();
toSerialize.data = "foo1";
var subf = new foo();
subf.data = "foo2";
toSerialize.subfoo = subf;
using (var pbfsc = new FileStream("testfile.proto", FileMode.Create))
{
using (var cs = new GZipStream(pbfsc, CompressionMode.Compress))
{
ProtoBuf.Serializer.Serialize(cs, toSerialize);
}
pbfsc.Close();
}
}
}
[ProtoContract, ProtoInclude(2000, typeof(foo))]
public interface ifoo
{
[ProtoMember(1)]
string data { get; set; }
[ProtoMember(2)]
ifoo subfoo { get; set; }
}
[ProtoContract]
public class foo : ifoo
{
[ProtoMember(1)]
public string data { get; set; }
[ProtoMember(2)]
public ifoo subfoo { get; set; }
}
私はできる限りの主題についてすべての読書をしました、そして、私は私が間違ったことをしたのを見ることができません。インターフェイスのリスト(コードは表示されていません)の問題に似ているように見えるので、オブジェクトをラッパークラスに入れてみましたが、それでも役に立ちませんでした。
subfooをタイプfooに変更すると、正常に機能しますが、より複雑な現実の問題では、インターフェイスの使用に固執したいと思います。ここで何か間違ったことをしたことがありますか、それともこれはprotobuf-netの問題ですか?
どんな助けでも大歓迎です。
乾杯
アレックス