Я использую protobuf-net для сериализации/десериализации своих моделей.
Моя модель довольно проста, сериализация работает постоянно, но если я добавлю определенные типы для моей модели десериализация позже, похоже, не удалась.
Я получаю исключение «Арифметическая операция привела к переполнению», как только я добавляю «int», «long» или «DateTime» для моих моделей.
Модель:
[ProtoContract]
public class MyModel
{
[ProtoMember(1)]
public DateTime Time { get; set; }
[ProtoMember(2)]
public List SomeList { get; set; }
[ProtoMember(3)]
public string Key { get; set; }
[ProtoMember(4)]
public string Value { get; set; }
}
Когда я удаляю свойство «Время», оно всегда работает.
Исключение:
at ProtoBuf.ProtoReader.TryReadUInt64VariantWithoutMoving(UInt64& value) in c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:line 375
at ProtoBuf.ProtoReader.ReadInt64() in c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:line 357
at ProtoBuf.BclHelpers.ReadTimeSpanTicks(ProtoReader source) in c:\Dev\protobuf-net\protobuf-net\BclHelpers.cs:line 191
at ProtoBuf.Serializers.DateTimeSerializer.Read(Object value, ProtoReader source) in c:\Dev\protobuf-net\protobuf-net\Serializers\DateTimeSerializer.cs:line 35
at ProtoBuf.Serializers.PropertyDecorator.Read(Object value, ProtoReader source) in c:\Dev\protobuf-net\protobuf-net\Serializers\PropertyDecorator.cs:line 77
at ProtoBuf.Serializers.TypeSerializer.Read(Object value, ProtoReader source) in c:\Dev\protobuf-net\protobuf-net\Serializers\TypeSerializer.cs:line 230
at ProtoBuf.Meta.TypeModel.DeserializeCore(ProtoReader reader, Type type, Object value, Boolean noAutoCreate) in c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 700
at ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type, SerializationContext context) in c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 589
at ProtoBuf.Serializer.Deserialize[T](Stream source) in c:\Dev\protobuf-net\protobuf-net\Serializer.cs:line 77
Я делаю что-то не так?
[EDIT]
private static void Main(string[] args)
{
var proto = new SerializeProtoTest();
var model = new MyModel
{
Key = "abc",
SomeList = new List { "cde" },
Time = DateTime.UtcNow,
Value = "something"
};
var s = proto.Serialize(model);
var d = proto.Deserialize(s);
Console.ReadKey();
}
[ProtoContract]
public class MyModel
{
[ProtoMember(3)]
public string Key { get; set; }
[ProtoMember(2)]
public List SomeList { get; set; }
[ProtoMember(1)]
public DateTime Time { get; set; }
[ProtoMember(4)]
public string Value { get; set; }
}
public class SerializeProtoTest
{
public T Deserialize(string value)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(value)))
{
return Serializer.Deserialize(ms);
}
}
public string Serialize(T obj)
{
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, obj);
var buffer = ms.ToArray();
return Encoding.UTF8.GetString(buffer, 0, buffer.Length);
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/230 ... n-overflow
Protobuf-net deserializing: «Арифметическая операция привела к переполнению». ⇐ C#
Место общения программистов C#
1714247741
Anonymous
Я использую protobuf-net для сериализации/десериализации своих моделей.
Моя модель довольно проста, сериализация работает постоянно, но если я добавлю определенные типы для моей модели десериализация позже, похоже, не удалась.
Я получаю исключение «Арифметическая операция привела к переполнению», как только я добавляю «int», «long» или «DateTime» для моих моделей.
Модель:
[ProtoContract]
public class MyModel
{
[ProtoMember(1)]
public DateTime Time { get; set; }
[ProtoMember(2)]
public List SomeList { get; set; }
[ProtoMember(3)]
public string Key { get; set; }
[ProtoMember(4)]
public string Value { get; set; }
}
Когда я удаляю свойство «Время», оно всегда работает.
Исключение:
at ProtoBuf.ProtoReader.TryReadUInt64VariantWithoutMoving(UInt64& value) in c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:line 375
at ProtoBuf.ProtoReader.ReadInt64() in c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:line 357
at ProtoBuf.BclHelpers.ReadTimeSpanTicks(ProtoReader source) in c:\Dev\protobuf-net\protobuf-net\BclHelpers.cs:line 191
at ProtoBuf.Serializers.DateTimeSerializer.Read(Object value, ProtoReader source) in c:\Dev\protobuf-net\protobuf-net\Serializers\DateTimeSerializer.cs:line 35
at ProtoBuf.Serializers.PropertyDecorator.Read(Object value, ProtoReader source) in c:\Dev\protobuf-net\protobuf-net\Serializers\PropertyDecorator.cs:line 77
at ProtoBuf.Serializers.TypeSerializer.Read(Object value, ProtoReader source) in c:\Dev\protobuf-net\protobuf-net\Serializers\TypeSerializer.cs:line 230
at ProtoBuf.Meta.TypeModel.DeserializeCore(ProtoReader reader, Type type, Object value, Boolean noAutoCreate) in c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 700
at ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type, SerializationContext context) in c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 589
at ProtoBuf.Serializer.Deserialize[T](Stream source) in c:\Dev\protobuf-net\protobuf-net\Serializer.cs:line 77
Я делаю что-то не так?
[EDIT]
private static void Main(string[] args)
{
var proto = new SerializeProtoTest();
var model = new MyModel
{
Key = "abc",
SomeList = new List { "cde" },
Time = DateTime.UtcNow,
Value = "something"
};
var s = proto.Serialize(model);
var d = proto.Deserialize(s);
Console.ReadKey();
}
[ProtoContract]
public class MyModel
{
[ProtoMember(3)]
public string Key { get; set; }
[ProtoMember(2)]
public List SomeList { get; set; }
[ProtoMember(1)]
public DateTime Time { get; set; }
[ProtoMember(4)]
public string Value { get; set; }
}
public class SerializeProtoTest
{
public T Deserialize(string value)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(value)))
{
return Serializer.Deserialize(ms);
}
}
public string Serialize(T obj)
{
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, obj);
var buffer = ms.ToArray();
return Encoding.UTF8.GetString(buffer, 0, buffer.Length);
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/23045750/protobuf-net-deserializing-arithmetic-operation-resulted-in-an-overflow[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия