[ProtoContract] を使用したインターフェイスと実装があります。インターフェイスで読み取り専用のプロパティが 1 つあります。インターフェイスとして宣言されたプロパティを逆シリアル化しようとすると、Protobuf で次のエラーが表示されます。
System.InvalidOperationException: Cannot apply changes to property IFoo.Id
私がテストしているコードは次のとおりです。
public void Main()
{
using (var ms = new MemoryStream())
{
var x = new HasFoo {TheFoo = new Foo(1)};
Serializer.Serialize(ms, x);
ms.Position = 0;
var clone = Serializer.Deserialize<HasFoo>(ms);
Assert.AreEqual(1, clone.TheFoo.Id);
}
}
[ProtoContract, ProtoInclude(100, typeof(Foo))]
public interface IFoo
{
[ProtoMember(1)]
long Id { get; }
}
[ProtoContract]
public class Foo : IFoo
{
[ProtoMember(1)]
public long Id { get; private set; }
public Foo() { }
public Foo(long id)
{
Id = id;
}
}
[ProtoContract]
public class HasFoo
{
[ProtoMember(1)]
public IFoo TheFoo { get; set; }
}
TheFoo
インターフェイスでセッターを宣言したくないので、可能な限りプロパティを宣言したままにしたいと思いIFoo
ます。動作させる方法はありますか?protobuf-net v2 を使用しています。