【问题标题】:How to define Data Contracts in WCF?如何在 WCF 中定义数据协定?
【发布时间】:2014-04-01 06:25:07
【问题描述】:

我是 WCF 的新手。因此,这个问题。我正在将 asmx Web 服务转换为 WCF 服务。

我在定义数据合同时遇到问题。

我的服务合同有两个操作,一个返回Customer 的数组,其中Customer 是我的自定义类型,包含一些字段。

在这里,我的问题是哪个需要声明为数据合约。

是包含Customer 数组的Customer 类还是Customers 类,还是两者兼有?

请建议

【问题讨论】:

  • 我会定义 Customer 类,然后返回该类的集合或单个实例,具体取决于操作返回的内容。
  • 操作合同返回客户数组,这意味着客户和客户都超出了服务范围。所以,我认为他们都应该被定义为数据合同..那是你想说什么?如果我没记错的话

标签: c# wcf datacontract


【解决方案1】:

您应该阅读有关 DataContracts 的 MSDN 文章:Using Data Contracts

简而言之:

您应该为您在服务中使用的每个类定义DataContract 属性,因此您需要CustomerCustomers 上的属性。

【讨论】:

  • @Patrick..感谢您简单明了的解释。我也有同样的想法,但只是想确认..:)
【解决方案2】:

请检查此示例代码。在下面的类文件中,我为我的 wcf 服务创建了数据契约。使用命名空间 System.Runtime.Serialization 对数据进行序列化。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace BusinessLogic
{
     [DataContract]
     [Serializable]
     public class POSTheaterListArgs
    {
    public POSTheaterListArgs()
    {
        TheaterDates = new List<string>();
    }
    [DataMember]
    public List<string> TheaterDates { get; set; }
    [DataMember]
    public int TheaterId { get; set; }
    [DataMember]
    public int NumofScreen { get; set; }
    [DataMember]
    public int? CompanyId { get; set; }
    [DataMember]
    public int ChainId { get; set; }
    [DataMember]


    private int _Number;
    public int Number { get { return _Number; } set { _Number = value; } }

    private bool _status;
    public bool status { get { return _status; } set { _status = value; } }

}

对于数组数据

    public POSTheaterListArgs()
    {
        TheaterDates = new List<string>();
    }
    [DataMember]
    public List<string> TheaterDates { get; set; }

将返回列表数组结构。

这可能对你有帮助....

【讨论】:

  • 我们需要明确提及 [Serializable] 吗?将类声明为 DataContract 是否足够好?
  • 是的,如果存在 [DataContract],则忽略 [Serializable]。这可能对例如有用创建一个类型,该类型将具有一个用于 WCF 的序列化投影和另一个用于 .NET Remoting 的投影(如果出于遗留原因将其与 WCF 一起使用)。使用 [Serializable],所有字段都成为数据协定的一部分(除非它们被标记为 [NonSerialized])。使用 [DataContract],仅包含标有 [DataMember] 的成员。请注意,如果一个类型同时具有 [DataContract] 和 [Serializable] 属性,它将使用 [DataContract] 映射
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多