2015-02-11 3 views
3

я сериализовать этот класс:Protobuf внутрисетевого пропуска десериализация специфических полех

[ProtoContract] 
public class TestClass 
{ 
    [ProtoMember(1)] public int[] hugeArray; 
    [ProtoMember(2)] public int x; 
    [ProtoMember(3)] public int y; 
    //lot more fields and properties to serialize here... 

} 

Как пропустить [ProtoMember (1)] hugeArray во время десериализации, так что только х, у и другие поля получают десериализации?

Моя проблема заключается в том, что иногда мне очень просто нужно получить «метаданные», которые описывают другие поля и свойства, но иногда мне нужен целый объект.

ответ

4

Два варианта:

  • два RuntimeTypeModel экземпляра (один встроенный вручную только с нужными полями уточненных)
  • два типов; т. е. создать более простой TestClass, который просто пропускает большие поля - то есть TestClassMetadata - и десериализуется в , что; protobuf-net не будет возражать вообще
+0

В моем классе 30 полей, и я старался избегать дублирования кода, чтобы пропустить 1 поле во время десериализации. Мне хотелось что-то вроде псевдокода: RuntimeTypeModel.BuildModelFor (typeof (TestClass)). RemoveMember (1), но я не уверен, что есть что-то подобное, предлагаемое protobuf-net. – Michal

+0

@Michal действительно - нет Remove; вам понадобится TypeModel.Create(), Добавить (введите, false), а затем Добавить членов, которые вы * делаете * хотите –

Смежные вопросы