1
我有一個接口和一個實現,都與[ProtoContract]。有一個屬性,它在接口上是隻讀的。當我嘗試反序列化聲明爲接口的屬性,的Protobuf給了我這個錯誤:可以反序列化爲protobuf-net中接口的只讀屬性嗎?
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。
不,你不能,對象被構造,從而失去了使用你的私人設置的機會。 – Landern 2012-04-06 16:23:58