在 API 响应中使用对象

Posted

技术标签:

【中文标题】在 API 响应中使用对象【英文标题】:Using object in API response 【发布时间】: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,你能展示你到目前为止所拥有的东西吗?也许代码示例可以帮助其他人指导您正确的方向 【参考方案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 反序列化为一个对象。但再次感谢您的方式要好得多。

以上是关于在 API 响应中使用对象的主要内容,如果未能解决你的问题,请参考以下文章

用于POST api请求和响应对象建模的RESTful api最佳实践

我期望从 API 响应中接收一组对象,但在使用 TypeScript 的 React 中获得一组 Promise

我想使用免费的 YouTube 到 mp3 API,但我只有字符串作为响应。我如何在对象/json/数组中传输响应? PHP

API(几乎)与GoLang的RESTFul变量响应

Spring在API响应中返回java对象时添加额外的键

如何在java中进行rest api调用并映射响应对象?