2017-09-26 5 views
1

J'utilise actuellement TypeLite pour générer des fichiers d'interface .d.ts à partir d'un ensemble de classes C#. J'ai rencontré un problème où certaines classes ont des attributs pour DataMember où la valeur donnée est différente du nom de la propriété. Dans ce cas, j'aimerais que TypeLite utilise l'attribut DataMember plutôt que le nom de la propriété - malheureusement, je ne trouve nulle part dans la documentation qui dit que c'est possible.Utilisation de TypeLite pour générer des classes C# avec le nom DataMember

Des idées?

+1

Il y a l'attribut '[TsProperty (Name =" ")]', est-ce une option? – CodeCaster

+0

Pas vraiment - un changement trop important à travers les fichiers existants. Bien qu'il maintiendrait la compatibilité descendante. Cela pourrait être OK, mais pas l'option préférée. Merci cependant :) – Askanison4

Répondre

2

Les code vérifie uniquement les intégrés [TsProperty] attribut pour renommer les propriétés:

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

    this.IsOptional = attribute.IsOptional; 
} 

Vous pouvez patcher trivialement cela également l'attribut [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; 
} 

Peut-être que vous pourriez présenter une Tirez la requête avec ce correctif. Assurez-vous d'ajouter des tests et considérez le cas où les deux attributs sont appliqués à une propriété. Pour des raisons de cohérence, vous devez également corriger la prise en charge de l'attribut [DataContract] pour pouvoir renommer les classes.

+0

Cela semble assez spot-on pour nos besoins. Je vais essayer et être sûr de revenir et de marquer le correctif si cela fait l'affaire. Merci :) – Askanison4