【问题标题】:How to return a dynamic object list from web api in c#如何在c#中从web api返回动态对象列表
【发布时间】:2020-01-06 14:34:48
【问题描述】:

我有一个对象

public class GeneralResponseClass
{
    public int ErrorCode { set; get; }
    public string Date { set; get; }
    public String ErrorMessage { set; get; }

    public List<dynamic> Data = new List<dynamic>();
    public bool Success { set; get; }
    public GeneralResponseClass()
    {
        Date = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
    }
}

在我的 API 函数中我想返回对象

[HttpGet]
public GeneralResponseClass Get()
    {
        GeneralResponseClass generalResponseClass = new GeneralResponseClass();

        generalResponseClass.ErrorCode = 0;
        generalResponseClass.ErrorMessage = "";


        generalResponseClass.Success = false;



        generalResponseClass.Data.Add(new
        {
            Name = "User 1",
            Email = "User1@user.com"
        });

        generalResponseClass.Data.Add(new
        {
            Name = "User 2",
            Email = "User2@user.com"
        });

        return generalResponseClass;
    }

在我得到的响应中没有得到列表

 {
   errorCode: 0,
date: "06/01/2020 16:32:12",
errorMessage: "",
success: false
}

为什么列表数据不返回?

【问题讨论】:

  • .Net Core 中是可能的。
  • 匿名类型只是语法糖。编译时,会为其生成一个类,但您的应用程序除了在编译时没有此类型的范围。就像您使用List&lt;object&gt; 一样。 JSON 序列化器没有任何类型信息来反映因此没有返回。
  • 如果您定义了任何 API 序列化程序设置,请发布。我的猜测是,您将其定义为一个字段,并且可能是序列化程序设置阻止反序列化它。尝试将其设为属性而不是字段。

标签: c# json api


【解决方案1】:

您不能返回任何带有anonymous 对象的集合。您可以使用类似于anonymousExpandoObject。您还可以为您的对象类型创建自定义类,因为它们在您的案例中具有相同的属性(至少在模板中)。

您可以在此处查看ExpandoObject 的更多信息:What are the true benefits of ExpandoObject?

【讨论】:

  • 恕我直言,我不认为它与动态对象有关。因为在我们的 API 中,有返回的动态对象没有任何问题。
  • 我的意思是匿名,我的错
  • 同意,动态很糟糕,但您没有回答 OP 关于为什么无法反序列化的问题。你展示了替代品。
  • “如何在 c# 中从 web api 返回动态对象列表”我猜这是 OP 的问题
  • 帮助过OP就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多