jp2*_*ode 3 c# wcf datacontract datacontractserializer
我正在看微软的如何:为类或结构创建基本数据合同,但它给我留下了很多问题.
他们提供了这个非常简单的例子:
using System;
using System.Runtime.Serialization;
[DataContract]
public class Person
{
// This member is serialized.
[DataMember]
internal string FullName;
// This is serialized even though it is private.
[DataMember]
private int Age;
// This is not serialized because the DataMemberAttribute
// has not been applied.
private string MailingAddress;
// This is not serialized, but the property is.
private string telephoneNumberValue;
[DataMember]
public string TelephoneNumber
{
get { return telephoneNumberValue; }
set { telephoneNumberValue = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
对于我的情况,我需要这个还包括另一个名为ADUser(Active Directory用户)的自定义类对象.
我明白ADUser必须标记DataContractAttribute,但我不明白究竟是怎么回事.
这是微软的课程,但这一次ADUser添加了字段:
using System;
using System.Runtime.Serialization;
[DataContract]
public class Person
{
// This member is serialized.
[DataMember]
internal string FullName;
// This is serialized even though it is private.
[DataMember]
private int Age;
// This is not serialized because the DataMemberAttribute
// has not been applied.
private string MailingAddress;
// This is not serialized, but the property is.
private string telephoneNumberValue;
[DataMember]
public string TelephoneNumber
{
get { return telephoneNumberValue; }
set { telephoneNumberValue = value; }
}
[DataMember]
public ADUser UserInfo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白我的ADUser班级需要做什么或者做什么,但我确信这些private东西可以不受影响.
我怎么需要修复这个ADUser类示例?
public class ADUser
{
private string first, last, loginID;
public ADUser() {
first = null;
last = null;
loginID = null;
}
private void getInfo() {
// code goes here
// which sets loginID;
}
public void SetName(string first, string last) {
this.first = first;
this.last = last;
getInfo();
}
public string LoginID { get { return loginID; } }
}
Run Code Online (Sandbox Code Playgroud)
正如@outcoldman和@EthanLi建议:
将[DataContract]属性添加到ADUser类中.
添加不带参数的公共构造函数.
选择要通过WCF的字段.用[DataMember]属性标记所有这些标记.
在序列化期间只有getter的属性将失败:所有公开的属性都应该同时具有getter和(public!)setter.因此,例如,LoginID如果您尝试将[DataMember]属性应用于此属性,则属性将失败.在这种情况下,请考虑将其更改为方法.
| 归档时间: |
|
| 查看次数: |
12110 次 |
| 最近记录: |