从 WEB API 调用返回自定义类数组时出错
本文关键字:数组 出错 自定义 返回 WEB API 调用 | 更新日期: 2023-09-27 18:37:19
当我从 WebAPI 返回 Person 类数组时,当我调用该 WebAPI 时出现以下错误,请帮助我如何解决问题。网络接口代码
public class PersonController : ApiController
{
public Person[] Get()
{
Person[] p = new Person[3]
{
new Person("ABC", "XYZ", 1),
new Person("A", "B", 1),
new Person("D", "E", 1)
};
return p;
}
人员类:
public class Person
{
public String FirstName;
public String LastName;
public int PersonID;
public Person(string fName, string lName, int id)
{
this.FirstName = fName;
this.LastName = lName;
this.PersonID = id;
}
}
这是我得到的错误:
发生错误。 "对象内容"1"类型无法序列化 的响应正文 内容类型"应用程序/XML;字符集=UTF-8'。 System.InvalidOperationException 错误有 发生。 类型 "控制台应用程序1.人"无法序列化。考虑标记它 与 DataContractAttribute 属性,并标记其所有属性 要使用 DataMemberAttribute 属性序列化的成员。如果 类型是一个集合,请考虑用 CollectionDataContractAttribute.请参阅 .NET 框架Microsoft 其他受支持类型的文档。 System.Runtime.Serialization.InvalidDataContractException 在。。。
这只是因为你的Person
类没有默认的构造函数。要解决此问题,只需向类添加一个默认构造函数:
public class Person
{
public String FirstName;
public String LastName;
public int PersonID;
public Person() {}
public Person(string fName, string lName, int id)
{
this.FirstName = fName;
this.LastName = lName;
this.PersonID = id;
}
}
错误告诉你很多。
类型"控制台应用程序1.人"无法序列化
问题在于您如何构建Person
模型。 ASP.NET Web API 可以自动序列化模型,并将其包含在消息正文中,以便客户端可以反序列化对象并读取数据。
若要使模型可序列化,需要为要传输的属性提供公共 getter 和 setter。下面是一个帮助您入门的示例:
public class Person
{
public String FirstName { get; set; }
public String LastName { get; set; }
public int PersonID { get; set; }
public Person(string fName, string lName, int id)
{
this.FirstName = fName;
this.LastName = lName;
this.PersonID = id;
}
}
此外,该站点还提供了一些关于如何操纵模型以完成不同事情的重要信息。