我有以下WCF DataContract:
[DataContract]
public class Occupant
{
private string _Name;
private string _Email;
private string _Organization;
private string _Badge;
public Occupant(string name, string badge, string organization)
{
Name = name;
Badge = badge;
Organization = organization;
}
public Occupant(string name, string badge)
{
Value = name;
Key = badge;
}
[DataMember]
public string Key
{
get { return _Name; }
set { _Name = value; }
}
[DataMember]
public string Value
{
get { return _Badge; }
set { _Badge = value; }
}
[DataMember]
public string Name
{
get { return _Name; }
set { _Name = value; }
}
[DataMember]
public string Email
{
get { return _Email; }
set { _Email = value; }
}
[DataMember]
public string Organization
{
get { return _Organization; }
set { _Organization = value; }
}
[DataMember]
public string Badge
{
get { return _Badge; }
set { _Badge = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试通过Web浏览器访问此服务(它托管在IIS上)时,我收到此错误:
System.Runtime.Serialization.InvalidDataContractException:类型'MyNamespace.Occupant'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记.
我的一个方法是返回一个List类型Occupant.这会导致它吗?
Stu*_*tLC 104
因为您提供了一个或多个初始化构造函数,所以还需要添加无参数(默认)构造函数.
即你需要添加:
[DataContract]
public class Occupant
{
// *** Needed only for Serialization
public Occupant() {}
...
Run Code Online (Sandbox Code Playgroud)
这是因为当您添加显式构造函数时,默认构造函数会消失.
[问题不在于返回方法List<Occupant>,因为方法没有序列化.)
您需要一个默认的无参数构造函数.我没有计划实际使用我的,所以我添加了一个IntelliSense摘要并抛出运行时异常以防止它被使用.
/// <summary>
/// parameterless default constructor only for serialization
/// </summary>
public MyClass() { throw new NotImplementedException("parameterless default constructor only for serialization"); }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42159 次 |
| 最近记录: |