1

我可以有这种形状的数据合同吗?

[DataContract]

public class YearlyStatistic{

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

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

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

我在这里假设 MonthlyStatistic 类也需要是 DataContract。您可以在 Web 服务中执行此操作吗?

4

3 回答 3

4

要将相同的模型用于 Web 服务,请将您的类标记为可序列化,使用 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; } 
}

您必须对父对象的复杂对象属性执行相同的操作。

于 2009-04-02T18:13:46.743 回答
1

是的,这就是标准的 WCF 序列化。您是想说 MonthlyStats 集合有一个名为 WeeklyStats 的属性,还是说每个单独的 MonthlyStatistic 都有一个 WeeklyStat 集合?如果它是前者,那它本身在 WCF 中不起作用。你必须做一些摆弄才能让它工作。如果是后者,那完全没问题。

于 2009-04-02T18:05:57.930 回答
1

是的,您可以从 WCF 服务来回发送您上面提到的数据合同。就像你说的,MonthlyStatistic 及其所有成员必须自己定义为数据合约或内置类型(如字符串)。

您甚至可以发送和接收更复杂的类型,例如当您有一个基类但想要发送或接收派生类的对象时(您可以使用 KnownType 属性来做到这一点)。在从 Javascript 接收(反序列化)时,有一个技巧,您必须使用它指定 WCF 的类型。如果您有兴趣,请随时询问。

于 2010-02-28T04:50:28.760 回答