Я хочу использовать MsgPack вместо Newtonsoft.JSON, поскольку он намного быстрее, но у меня есть проблема при попытке десериализовать список нулевых целых чисел.C# MsgPack бросает, когда распаковывает список нулевых целых чисел, содержащих NULL как элемент
Вот фрагмент кода, который я использую:
public class MyClass
{
public MyClass()
{
MyCustomList = new List<int?>();
}
public List<int?> MyCustomList { get; private set; }
}
MyClass source = new MyClass();
source.MyCustomList.Add(1);
source.MyCustomList.Add(null);
var context = new SerializationContext {SerializationMethod = SerializationMethod.Map};
context.DictionarySerlaizationOptions.OmitNullEntry = true;
//Create serializers
var serializer = SerializationContext.Default.GetSerializer<MyClass>(context);
var serializerDest = SerializationContext.Default.GetSerializer<MyClass>(context);
Stream stream = new MemoryStream();
serializer.Pack(stream, source);
stream.Position = 0;
var unpackedObject = serializerDest.Unpack(stream);
Последняя строка коды бросает исключение, как «{» распакованное значение не является «System.Int32» типа. Не конвертируйте nil MessagePackObject в System.Int32. "}"
Свойство My MyOustomList имеет тип List и не работает. Если я переключился на IList, это работает
Любая идея, если это известная ошибка? Как я могу избавиться от него?
Благодаря
Вы можете включать в вашей реализации "MyClass", пожалуйста? –
Я добавил реализацию класса. –
У этого есть опечатка ошибка. context.DictionarySerlaizationOptions.OmitNullEntry = true; Кроме того, какую версию SerializationContext вы используете, потому что в vs2015 она выглядит совсем по-другому. Я думал, что запустим этот код и увижу вашу ошибку, но требуемая реализация vs2015 выглядит совсем по-другому:/поэтому я не могу дойти до точки, где вы получили свою ошибку. –