Lorsque je copie la classe DataColumns dans la classe RatesOfPay, les attributs DataMember dans WCF ne sont plus respectés lorsque j'utilise le code suivant à copier. Je veux voir les résultats dans l'ordre Step8, Step9, Step10 mais j'obtiens Step10, Step8, Step9 car l'attribut Order est ignoré et les colonnes sont classées par ordre alphabétique. . De plus, l'attribut EmitDefaultValue = false est ignoré et je vois des étapes avec des valeurs nulles.Les attributs DataMember dans WCF ne sont pas honorés lorsque je copie de la liste à un autre
List<DataColumns> source = new List<DataColumns>();
List<RatesOfPay> destination = new List<RatesOfPay>();
destination = source.Select(d => new RatesOfPay
{
step8 = d.column8,
step9= d.column9,
step10 = d.column10
}).ToList();
public class DataColumns
{
[DataMember(Order = 0, Name = "column8", EmitDefaultValue = false)]
public string column8 { get; set; }
[DataMember(Order = 1, Name = "column9", EmitDefaultValue = false)]
public string column9 { get; set; }
[DataMember(Order = 2, Name = "column10", EmitDefaultValue = false)]
public string column10 { get; set; }
}
public class RatesOfPay
{
[DataMember(Order = 0, Name = "Step8", EmitDefaultValue = false)]
public string step8 { get; set; }
[DataMember(Order = 1, Name = "Step9", EmitDefaultValue = false)]
public string step9 { get; set; }
[DataMember(Order = 2, Name = "Step10", EmitDefaultValue = false)]
public string step10 { get; set; }
}
Je pense que vous ne comprenez pas à quoi sert 'DataMember'. Ce n'est pas pour commander les propriétés/champs dans un objet défini par l'utilisateur. Il est utilisé pour fournir des informations sur le membre à utiliser par 'DataContractSerializer'. Si vous regardez le résultat sérialisé (c'est-à-dire, XML), vous devriez voir Step8, Step9 et Step10. Si vous regardez dans le débogueur quand il est désérialisé, vous le verrez dans l'ordre alphabétique ASCII. – Tim
De même, 'EmitDefaultValue' indique au sérialiseur d'émettre la valeur par défaut pour le type de données. C'est vrai par défaut. Lorsque vous le définissez sur false, toute propriété qui a une valeur nulle (ou une valeur par défaut pour les types de valeurs) ne sera pas sérialisée, mais elle le sera toujours dans l'objet. Jetez un oeil à [DataMemberAttribute Class] (https://msdn.microsoft.com/en-us/library/System.Runtime.Serialization.DataMemberAttribute (v = vs.110) .aspx) sur MSDN - il existe plusieurs exemples démontrer ce qu'est quoi - mais tout cela s'applique à ** la sérialisation **. – Tim
Merci beaucoup pour votre commentaire. Le changer pour utiliser [XmlSerializerFormat] a fait l'affaire! – Raj