#c# #protobuf-net
#c# #протобуф-сеть
Вопрос:
наследование protobuf-net v2 r450
Надеясь, что кто-нибудь поможет мне направить меня в правильном направлении с помощью protobuf-net. Весь пример кода, который я могу найти, кажется, указывает на то, что то, что я пытаюсь сделать, должно быть возможным.
Домен (мой конечный домен будет более сложным, чем этот, но я даже не могу заставить это работать):
[ProtoContract]
public class GeographyData
{
[ProtoMember(1)]
public DateTime LastRefreshTime { get; set; }
[ProtoMember(2, AsReference = true, IsRequired = true)]
public GeographyItem Item { get; set; }
}
[ProtoContract]
[ProtoInclude(3, typeof(HotelData))]
public class GeographyItem
{
[ProtoMember(1)]
public Guid Id { get; set; }
[ProtoMember(2)]
public string Name { get; set; }
}
[ProtoContract]
public class HotelData : GeographyItem
{
}
Тест:
var geographyDataTest = new GeographyData();
geographyDataTest.LastRefreshTime = DateTime.Now;
geographyDataTest.Item = new HotelData
{
Id = Guid.Empty,
Name = "Test",
};
var test = ProtoBuf.Serializer.DeepClone(geographyDataTest);
Исключение:
Невозможно привести объект типа ‘Домен.География.GeographyItem’ для ввода’ домена.География.Данные об отеле».
[InvalidCastException: Unable to cast object of type 'Domain.Geography.GeographyItem' to type 'Domain.Geography.HotelData'.]
proto_14(Object , ProtoReader ) 2638
ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read(Object value, ProtoReader source) in C:Devprotobuf-netprotobuf-netSerializersCompiledSerializer.cs:49
ProtoBuf.Meta.RuntimeTypeModel.Deserialize(Int32 key, Object value, ProtoReader source) in C:Devprotobuf-netprotobuf-netMetaRuntimeTypeModel.cs:413
ProtoBuf.ProtoReader.ReadTypedObject(Object value, Int32 key, ProtoReader reader, Type type) in C:Devprotobuf-netprotobuf-netProtoReader.cs:534
ProtoBuf.BclHelpers.ReadNetObject(Object value, ProtoReader source, Int32 key, Type type, NetObjectOptions options) in C:Devprotobuf-netprotobuf-netBclHelpers.cs:428
proto_2(Object , ProtoReader ) 688
ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read(Object value, ProtoReader source) in C:Devprotobuf-netprotobuf-netSerializersCompiledSerializer.cs:49
ProtoBuf.Meta.RuntimeTypeModel.Deserialize(Int32 key, Object value, ProtoReader source) in C:Devprotobuf-netprotobuf-netMetaRuntimeTypeModel.cs:413
ProtoBuf.Meta.TypeModel.DeepClone(Object value) in C:Devprotobuf-netprotobuf-netMetaTypeModel.cs:1034
ProtoBuf.Serializer.DeepClone(T instance) in C:Devprotobuf-netprotobuf-netSerializer.cs:46
Кто-нибудь может дать мне несколько советов?
Спасибо
Комментарии:
1. Согласен, похоже, это должно сработать. Я не на ПК, но посмотрю позже
Ответ №1:
Существует существующая известная ошибка с AsReference и наследованием, которую я надеюсь скоро устранить.
Комментарии:
1. Спасибо за быстрый ответ, который Марк действительно оценил! Конечно, если я удалю AsReference, он будет работать нормально, черт возьми, я действительно этого хотел 🙂
2. @David Я, вероятно, смогу посмотреть на это в течение нескольких дней, если вам это нужно
3. Это было бы фантастически, но я знаю, как тяжело разрабатывать библиотеки, и вдруг все хотят, чтобы они работали над тем, что они делают 🙂 так что не убивайте себя, я уверен, я найду другое решение 🙂
4. @david это сценарий, который должен поддерживаться.
5. Спасибо, это было бы здорово 🙂