Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Web服务DTO属性与公共变量_C#_Asp.net_Web Services - Fatal编程技术网

C# ASP.NET Web服务DTO属性与公共变量

C# ASP.NET Web服务DTO属性与公共变量,c#,asp.net,web-services,C#,Asp.net,Web Services,我有一个web服务,它将返回一个列表,其中Person是DTO。有什么理由我不应该给人下这样的定义: public class Person { public string Name; public string Email; } 而不是 public class Person { private string _name; public string Name { get { return _name; } s

我有一个web服务,它将返回一个列表,其中Person是DTO。有什么理由我不应该给人下这样的定义:

public class Person {
    public string Name;
    public string Email;
}
而不是

public class Person {
    private string _name;
    public string Name {
      get {
       return _name;
      }
      set {
       _name = value;
      }
   }
}

第二个版本更详细,我看不出公共实例变量在这里出现问题的任何原因。有什么原因吗?

一般来说-这是一个设计决策-请参阅: 但DTO实现略有不同。由于这只是一个DTO,并且没有特定于set/get属性的实现,因此您也可以使用不太详细的方法。任何实现更改都不需要客户端重新编译,因为在任何情况下,它们都将通过服务以相同的方式序列化,所以您的较小实现是可以的


仅供参考-如果客户端要使用这些类进行数据绑定,那么它们必须是类中的属性。字段不会被绑定。

属性优先于要支持的字段

  • 绑定;无法绑定字段
  • 多态性;不能使用
    公共虚拟字符串名称
您可以使用自动属性来减少冗长

public class Person {
    public string Name { get; set; }
    public string Email { get; set; }
}

除了所有其他答案外,属性还允许在读取或写入属性时运行验证。在使用字段时,这需要做更多的工作。

但是没有定义哪种服务技术-一些代理类是作为字段而不是属性生成的。