Comment envoyer des objets complexes en utilisant WCF? Est-ce que ça marche? Est-ce bien?

StackOverflow https://stackoverflow.com/questions/710856

  •  22-08-2019
  •  | 
  •  

Question

Puis-je avoir un contrat de données de cette forme ??

[DataContract]

public class YearlyStatistic{

[DataMember]
public string Year{get;set;}

[DataMember]
public string StatisticName {get;set;}

[DataMember]
public List<MonthlyStatistic> MonthlyStats {get;set}
};

Je suppose ici que la classe MonthlyStatistic sera également besoin d'être un DataContract. Pouvez-vous faire dans un service Web?

Était-ce utile?

La solution

Pour utiliser le même modèle pour les services Web, la marque de votre classe Serializable utiliser le XmlRoot et XmlElement dans l'espace de noms System.Xml.Serialization. Voici un exemple en utilisant votre exemple:

[Serializable]
[XmlRoot("YearlyStatistic")]
public class YearlyStatistic
{
    [XmlElement("Year")]
    public string Year { get; set; }

    [XmlElement("StatisticName")]
    public string StatisticName { get; set; }

    [XmlElement("MonthlyStats")]
    public List<MonthlyStatistic> MonthlyStats { get; set; } 
}

Vous devrez faire la même chose pour vos propriétés d'objets complexes de l'objet parent.

Autres conseils

Yep, thats sérialisation norme WCF là. Essayez-vous de dire la collection MonthlyStats a une propriété appelée WeeklyStats, ou que chaque individu a MonthlyStatistic une collection WeeklyStat? Si son premier, que le travail ne marche pas dans WCF en natif. Vous devrez faire un peu de tripotage pour le faire fonctionner. Si sa ce dernier, son parfaitement bien.

Oui, vous pouvez envoyer le contrat de données que vous avez mentionné ci-dessus et-vient d'un service WCF. Comme vous l'avez dit, MonthlyStatistic et tous ses membres devront être définis comme eux-mêmes données sur les contrats ou être construit dans les types (comme les chaînes).

Vous pouvez même envoyer et recevoir plusieurs types complexes comme lorsque vous avez une classe de base mais que vous souhaitez envoyer ou recevoir un objet d'une classe dérivée (vous le faire en utilisant l'attribut KnownType). Lors de la réception (de-sérialisation), de Javascript, il y a un truc à l'aide que vous devez spécifier le type de WCF. Si vous êtes intéressé, vous pouvez demander.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top