1
[DataContract]
public class I<TId>
{
[DataMember(Order = 1)]
public TId Id { get; set; }
}
[DataContract]
public class J : I<int>
{
[DataMember(Order = 1)]
public string Description { get; set; }
}
class Program
{
static void Main()
{
var o = new J { Id = 5, Description = "xa-xa", };
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, o);
ms.Position = 0;
var o2 = Serializer.Deserialize<J>(ms);
Debug.Assert(o.Id == o2.Id);
}
}
}
爲什麼斷言失敗以及如何解決它?最簡單的protobuf-net示例所需的幫助4
謝謝。
爲什麼需要這種消歧?我理解需要它的時候,被序列化的對象的靜態類型是基本類型之一,在這種情況下,反序列化器必須知道實例化哪個派生類型。但是在這裏,反序列化的類型是明確的,不是? – mark 2011-06-09 05:11:04
@標記的重點不在*知道* - 它是在所有重要的字段編號上。字段號碼在protobuf(谷歌規範)中佔據着統治地位。我在這裏使用它們是「什麼是實際類型」分辨率的一部分 - 它是「我是」,「J」,「J」的某個子類還是「I」的某個非「J」子類「 –
2011-06-09 06:10:10