Использование TypeLite для создания классов C# с именем DataMember

В настоящее время я использую TypeLite для создания файлов интерфейса .d.ts из набора классов C#. Я столкнулся с проблемой, когда некоторые классы имеют атрибуты для DataMember, где заданное значение отличается от имени свойства. В этом случае я бы хотел, чтобы TypeLite использовал атрибут DataMember, а не имя свойства — к сожалению, я не могу найти нигде в документации, где говорится, что это возможно.

Любые идеи?


person aaron-bond    schedule 26.09.2017    source источник
comment
Есть атрибут [TsProperty(Name="")], это вариант?   -  person CodeCaster    schedule 26.09.2017
comment
Не совсем — слишком большие изменения в существующих файлах. Хотя бы сохранялась обратная совместимость. Это может быть нормально, но не предпочтительный вариант. Спасибо хоть :)   -  person aaron-bond    schedule 26.09.2017


Ответы (1)


код проверяет только встроенный атрибут [TsProperty] для переименования свойств:

var attribute = memberInfo.GetCustomAttribute<TsPropertyAttribute>(false);
if (attribute != null) {
    if (!string.IsNullOrEmpty(attribute.Name)) {
        this.Name = attribute.Name;
    }

    this.IsOptional = attribute.IsOptional;
}

Вы можете тривиально исправить это, чтобы также включить атрибут [DataMember]:

var dataMemberAttribute = memberInfo.GetCustomAttribute<System.Runtime.Serialization.DataMemberAttribute>(false);
if (dataMemberAttribute!= null) {
    if (!string.IsNullOrEmpty(dataMemberAttribute.Name)) {
        this.Name = dataMemberAttribute.Name;
    }

    this.IsOptional = !dataMemberAttribute.IsRequired;
}

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

Для согласованности вам также придется исправить поддержку атрибута [DataContract], чтобы иметь возможность переименовывать классы.

person CodeCaster    schedule 26.09.2017
comment
Это звучит довольно точно для наших нужд. Я попробую и обязательно вернусь и отмечу исправление, если это поможет. Спасибо :) - person aaron-bond; 26.09.2017