gpt4 book ai didi

c# - DataContractAttribute 基础知识

转载 作者:行者123 更新时间:2023-11-30 15:00:00 25 4
gpt4 key购买 nike

我正在查看 Microsoft 的操作方法:Create a Basic Data Contract for a Class or Structure ,但这给我留下了很多问题。

他们提供了这个非常简单的例子:

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; }
}
}

对于我的情况,我还需要包含另一个名为 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; }

}

我真的不明白我的 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; } }

}

最佳答案

作为@outcoldman@EthanLi建议:

  1. [DataContract] 属性添加到 ADUser 类。

  2. 添加公共(public)构造函数不带参数。

  3. 选择要通过 WCF 传递的字段。用 [DataMember] 属性标记它们。

  4. 只有 getter 的属性 将在序列化期间失败:所有公开的属性都应该同时具有 getter 和(公共(public)!)setter。因此,例如,如果您尝试对其应用 [DataMember] 属性,您的 LoginID 属性将失败。在这种情况下,考虑将其更改为方法。

关于c# - DataContractAttribute 基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15937252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com