在 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