从 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 在。。。

从 WEB API 调用返回自定义类数组时出错

这只是因为你的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;
    }
}

此外,该站点还提供了一些关于如何操纵模型以完成不同事情的重要信息。