Не найдено подходящей кодировки типа по умолчанию. При сериализации с использованием protobuf - PullRequest
3 голосов
/ 02 февраля 2011

У меня есть класс ниже: -

[Serializable]
[DataContract(Name = "StateValueWrapper")]
public class StateValueWrapper
{
    [DataMember(Order = 1)]
    public Type StateValueType { get; set; }

    [DataMember(Order = 2)]
    public object WrappedObj { get; set; }
}

Я пытаюсь сериализовать объект вышеупомянутого класса, используя protobuf.net.Пожалуйста, предложите мне, что мне нужно сделать для этого?Ниже мой код для сериализации: -

            MemoryStream ms = new MemoryStream();
            var srariazeObj = new StateValueWrapper();
            srariazeObj.StateValueType = typeof(int);
            srariazeObj.WrappedObj = 5;
            ProtoBuf.Serializer.NonGeneric.Serialize(ms, srariazeObj);

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

Теперь, что я сделал, я создал пользовательский поставщик сеансов и передал его в объект StateValueWrapper.В стороне от метода сериализации сначала я сериализую WrappedObj StateValueWrapper с использованием protobuf и назначаю его обратно в WrappedObj, теперь двоичный сериализатор будет сериализовать мой объект StateValueWrapper, который содержит информацию о типе и байтовый массив.В то время как десериализация первого двоичного сериализатора будет десериализовать SessionStateItemCollection и вернет StateValueWrapper с информацией о типе и байтовым массивом, тогда я выполнил десериализацию (protobuf) для WrappedObj, используя информацию о типе StateValueWrapper.

1 голос
/ 02 февраля 2011

Type не сериализуется через protobuf-net, и не является object. Я понимаю, что вы пытаетесь сделать, и если честно, не может знать типы заранее. Я подозреваю, что вы должны рассмотреть сериализацию AssemblyQualifiedName типа (string) и byte[] для объекта (через MemoryStream). Я могу привести пример позже, если хотите (дайте мне знать).

Однако, если возможно указать конечный потерянный тип, который вам необходимо поддерживать (например, "string или int или Customer или Guid only "), то существует гораздо более эффективный и удобный подход - опять же, я могу привести пример, если это ваш сценарий - дайте мне знать.

...