我正在使用WCF和JSON构建(希望)RESTful服务。
例如:
[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; }
}
}
我需要从WCF方法返回一个没有电话号码的Person对象(即w / FullName和Age),所以我想知道是否可以使用Person类和WFC方法的属性属性来实现它? / p>
由于
诉P>
答案 0 :(得分:2)
或者,您可以使用[DataMember(EmitDefaultValue = false)]并将您不想序列化的字段设置为null或根本不进行初始化
E.g。
[DataContract]
public class Person
{
// This member is serialized.
[DataMember]
internal string FullName;
[DataMember( EmitDefaultValue=false)]
public string TelephoneNumber
{
get { return telephoneNumberValue; }
set { telephoneNumberValue = value; }
}
}
然后你可能有两种方法以两种不同的方式加载\ create Person
public Person LoadWithPhone()
{
return new Person() { FullName = "Name", TelephoneNumber = "123456" };
}
public Person LoadWithoutPhone()
{
return new Person() { FullName = "Name" }; //TelephoneNumber is null
}
然后当序列化由第二种方法创建的人时,TelephoneNumber将不会被序列化 当从DB加载对象时,这可能很有用,您可以使用多个方法加载不同的列,或者使用一个正在构建查询的方法和仅使用请求的字段初始化对象。
答案 1 :(得分:1)
简单的答案是你不能这样做,但这里有一个例子,你可以在没有大量工作的情况下完成同样的目标。
您需要有两个Person
个类,一个具有PhoneNumber
属性DataMember
,另一个不具有Person
属性。执行此操作的最佳方法可能是从主[DataContract]
public class PersonWithoutPhone
{
private Person _p;
public PersonWithoutPhone(Person p)
{
_p = p;
}
[DataMember]
internal string FullName
{
get { return _p.FullName; }
}
[DataMember]
private int Age
{
get { return _p.Age; }
}
public string TelephoneNumber
{
get { return _p.TelephonNumber; }
}
}
[DataContract]
public class PersonWithPhone
{
private Person _p;
public PersonWithoutPhone(Person p)
{
_p = p;
}
[DataMember]
internal string FullName
{
get { return _p.FullName; }
}
[DataMember]
private int Age
{
get { return _p.Age; }
}
[DataMember]
public string TelephoneNumber
{
get { return _p.TelephonNumber; }
}
}
类
{{1}}