Нужно ли объявлять атрибут [DataMember (Order = n)] в открытом методе? - PullRequest
2 голосов
/ 08 июня 2010

В своем решении я создал открытый класс для хранения значения и уже объявил атрибут [DataContract / DataMember].

Например,

[DataContract]
public class MeterSizeInfo
{
    string _meterSizeId;

    [DataMember(Order = 1)]
    public string MeterSizeId
    {
        get { return this._meterSizeId; }
        set { this._meterSizeId = value; }
    }

    string _meterSizeName;

    [DataMember(Order = 2)]
    public string MeterSizeName
    {
        get { return this._meterSizeName; }
        set { this._meterSizeName = value; }
    }

}

Затем мне нужно добавить еще один публичный метод для всего проекта.Интересно, я должен добавить [DataMember (Order = 3)] для этого или нет.

    [DataMember(Order = 3)] //<--- must declare or not?
    public string DoSomething()
    {
        // do something...
    }

Я понимаю, что если я хочу использовать сериализатор в protobuf-net для сериализации моих данных, хранящихся в, я имеюобъявить эти атрибуты.но я не уверен насчёт метода.

, пожалуйста, помогите.Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 09 июня 2010

protobuf-net - это сериализатор значений; он ничего не знает о методах, кроме свойств. Если вы используете тот же (или совместимый) тип, то метод будет представлен автоматически, но это не имеет ничего общего с protobuf-net (или любой другой сериализацией).

Re тема добавления атрибутов; в текущем выпуске обычно требуется что-то , чтобы знать, какие свойства сериализовать (и что более важно: с какими идентификаторами). Там - это неявный режим, но я не рекомендую его, если вы не знаете , что вы больше никогда не будете менять тип. Когда-либо. На всех.

В "v2" вы можете удалить атрибуты; у вас есть возможность использовать для этого внешнюю модель, поэтому у вас может быть:

var model = TypeModel.Create();
model[typeof(MeterSizeInfo)].Add("MeterSizeId", "MeterSizeName");

(не указывайте мне точный API, но что-то в этом роде)

Затем вы можете использовать model.Serialize и т. Д.

0 голосов
/ 08 июня 2010

Таким образом не только свойства доступны для чтения и записи ... поэтому вы не можете добавить атрибут для метода.

0 голосов
/ 08 июня 2010

Нет - не должно быть там. Вы не можете сериализовать метод!

...