我可以拥有这种形状的数据合约吗?
[DataContract]
public class YearlyStatistic{
[DataMember]
public string Year{get;set;}
[DataMember]
public string StatisticName {get;set;}
[DataMember]
public List<MonthlyStatistic> MonthlyStats {get;set}
};
我在这里假设MonthStatistic类也需要是DataContract。你能在网络服务中做到这一点吗?
答案 0 :(得分:4)
要对Web服务使用相同的模型,请将您的类标记为Serializable,并使用System.Xml.Serialization命名空间中的XmlRoot和XmlElement。以下是使用您的示例的示例:
[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; }
}
您必须对父对象的复杂对象属性执行相同的操作。
答案 1 :(得分:1)
是的,这就是那里的标准WCF序列化。您是否想说MonthStats集合中有一个名为WeeklyStats的属性,或者每个MonthStatistic都有一个WeeklyStat集合?如果它是前者,那在WCF本身就不起作用。你必须做一些摆弄才能让它发挥作用。如果是后者,那就完全没问题了。
答案 2 :(得分:1)
是的,您可以从WCF服务来回发送您上面提到的数据合同。就像你说的那样,MonthlyStatistic及其所有成员必须自己定义为数据合约,或者以类型(如字符串)构建。
您甚至可以发送和接收更复杂的类型,例如当您拥有基类但希望发送或接收派生类的对象时(您将使用KnownType属性执行此操作)。从Javascript接收(反序列化)时,有一个技巧,您必须使用它来指定WCF的类型。如果您有兴趣,请随时提出。