protobuf- net декораторы для методов и для нескольких подклассов основного класса - PullRequest
1 голос
/ 03 апреля 2020

в OOP, как мы декорируем методы ... и несколько подклассов?

, таких как:

[ProtoContract]
[ProtoInclude(1, typeof(L1Token))]
[ProtoInclude(2, typeof(L2Token))]
public class Token { ... }

[ProtoContract]
public class L1Token : Token { ... }

[ProtoContract]
public class L2Token : Token { 
    ... 

    [OperationContract ?????]
    public override string ToString()
    { ... }
}

Кроме того, как используются другие декораторы, такие как :

[ProtoBehavior]

[OperationContract]

или [DataMember (Order = 1)]?

Спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

подклассы: вы уже показали, как это сделать - что у вас есть это ; если я неправильно понимаю эту часть вопроса, пожалуйста, уточните, и я постараюсь помочь больше

методов: вы не делаете; protobuf- net не очень заинтересован в методах - это сериализатор data , а не стек RP C; если вам нужен стек RP C: рассмотрите protobuf- net .Grp c, который выводит аромат WCF в gRP C с использованием protobuf- net и базовых стеков Google / Microsoft gRP C; вот документы по началу работы ; здесь также обсуждается [OperationContract].

[ProtoBehavior] имеет прямое отношение к WCF; вы используете WCF? честно говоря, большинство людей нет; Опять же, если вы ищете RP C на основе протобуфа, я бы лучше указал вам в направлении protobuf- net .Grp c

Что касается [DataMember(Order = 1)]: protobuf- net нужны цифры c токены для разрешения полей; Есть несколько способов его принятия, чтобы обеспечить более широкую совместимость; наиболее типичным (и наиболее мощным, поскольку он обеспечивает более точное управление) является использование собственных атрибутов библиотеки:

[ProtoContract]
public class Foo {
    [ProtoMember(1)] public int X {get;set;}
    [ProtoMember(2)] public string Y {get;set;}
    [ProtoMember(3)] public long Z {get;set;}
}

Однако вышеприведенное будет на 100% совместимо с тем же намерением, выраженным через альтернативные атрибуты:

[DataContract]
public class Foo {
    [DataMember(Order = 1)] public int X {get;set;}
    [DataMember(Order = 2)] public string Y {get;set;}
    [DataMember(Order = 3)] public long Z {get;set;}
}

(а также [XmlType]/[XmlElement(...)])

Он предпочитает атрибуты библиотеки, заданные c, и, если они найдены, они выигрывают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...