【问题标题】:Using object in API response在 API 响应中使用对象
【发布时间】:2013-07-24 07:31:26
【问题描述】:

我正在构建一个响应 GET 请求的 API。一个字段是一个对象,它需要与查询返回的数据一样多次重复。

谁能给我一个示例,说明如何在 c# 的响应中使用对象?还需要创建类吗?

提前致谢。

添加:

到目前为止,我的结构如下:

public class root
{
public int model { get; set; }
public string lang { get; set; }
public part[] parts { get; set; }
}

public class part
{
public int id { get; set; }
public string name { get; set; }
public type part_types { get; set; }
}

public class type
{
public string url { get; set; }
public string desc { get; set; }
}

并且响应返回为

{ “model”:4,“lang”:“en_US”,“parts”:[{“id”:1545,“name”:“Part 1”,“part_types”:{“url”:“part .com/type1", "desc" : "有 6 位" } } ] }

但我需要它

{ “model”:4,“lang”:“en_US”,“parts”:[ {“id”:1545,“name”:“Part 1”,“part_types”:{“type 1”:{ “url”:“part.com/type1”,“desc”:“有 6 位”},“type 2”:{“url”:“part.com/type2”,“desc”:“有 7 位。 " } } } ] }

part_type 字段是对象,我创建了一个名为 type 的类。但是我需要有一种或多种类型并指定类型的名称,例如“type 1”,然后在它的 url 和 desc 下还有 2 个字段。如您所见,上面有 2 种类型,类型 1 和类型 2。

谁能帮我解决我哪里出错了?

【问题讨论】:

  • 既然你正在构建这个API,你能展示你到目前为止所拥有的东西吗?也许代码示例可以帮助其他人指导您正确的方向

标签: c# api response


【解决方案1】:

那么,如果我理解正确的话,你希望“part_types”能够有很多部分吗?在您当前的代码中,part_types 对象只能有一个。

你需要两件事: 1. 作为集合的数据类型,以及 2. 以您想要的方式写入该数据类型的序列化程序。 因此,例如,您可以使用字典 (System.Collections.Generic.Dictionary)。

public Dictionary<string,type> part_types { get; set; }

所以,假设你已经创建了对象 type1 和 type2,你会这样写:

mypart.part_types = new Dictionary<string,type>();
mypart.part_types.Add("type 1", type1);
mypart.part_types.Add("type 2", type2);

现在会发生什么取决于序列化程序。我通常使用 Json.NET,它运行良好并且是免费的。我像你一样设置我的对象,但使用字典,我得到:

{
  "model": 4,
  "lang": "en_US",
  "parts": [
    {
      "id": 1545,
      "name": "Part 1",
      "part_types": {
        "type 1": {
          "url": "part.com/type1",
          "desc": "has 6 bits"
        },
        "type 2": {
          "url": "part.com/type1",
          "desc": "has 6 bits"
        }
      }
    }
  ]
}

我认为这就是您要寻找的...但是,使用 DataContractJsonSerializer (System.Runtime.Serialization.Json.DataContractJsonSerializer),我得到了:

{
  "lang": "en_US",
  "model": 4,
  "parts": [
    {
      "id": 1545,
      "name": "Part 1",
      "part_types": [
        { "Key" : "type 1", "Value": {"desc":"has 6 bits","url":"part.com\/type1"} },
        { "Key" : "type 2", "Value": {"desc":"has 6 bits","url":"part.com\/type1"} }
      ]
    }
  ]
}

我不确定 DataContractJsonSerializer 如何处理其他集合(例如 Lists、KeyValuePairs 等),所以如果您正在使用它,您可能需要进行试验。

【讨论】:

  • 感谢您的回答,有没有其他方法可以在不将其放入数组的情况下做到这一点?正如他们指定的那样,数组运算符中没有它。例如,类型不在“[”和“]”字符之间。
  • 啊,我想我现在明白了。我编辑了我的答案——当我重新阅读它时,我注意到原版有一个不准确的地方,无论如何(我应该说一组键值对)。但是,我希望我的修订对您有所帮助。
  • 非常感谢!!我还找到了另一种修复它的方法,方法是在循环上创建一个 JSON 字符串,然后将 JSON 反序列化为一个对象。但再次感谢您的方式要好得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多