这就是我今天将JSON列表反序列化为对象列表的方式。
export class StrLst
{
public lst : Array <string> = new Array <string> ();
public deserialize (input : any) : StrLst
{
for (let i = 0; i < input.length; i ++)
{
this.lst.push (input [i]);
}
return this;
}
}
let lst : StrLst = new StrLst().deserialize(["abc", "def"]);
有没有办法摆脱deserialize
中的循环?
我考虑将deserialize
设为静态并返回分配的Array
而不是包装item-class(StrLst
)。这是个好主意还是有缺点?我希望收藏而不是包装。
public static deserialize (input : any) : Array <string>
{
let ret : Array <string> = new Array <string> ();
...
return ret;
}
let lst : Array <string> = StrLst.deserialize (["abc", "def"]);
编辑:JSON的反序列化是一项常见的任务,列表中包含许多JSON。因此,我正在寻找一种通用且优雅的设计。为了反序列化非列表,我使用Object.assing。但是为了简单起见,我仅在示例中使用了字符串。
编辑:我试图简化示例。我需要反序列化,因为JSON列表的元素通常不是字符串,而是更复杂的东西。 JSON也是HTTP请求的响应,而不是硬编码。
答案 0 :(得分:0)
反序列化是将数据源转换为结构化对象的过程。
如果您尝试实现此目的,则可以使用JSON.parse(data: string)
,它接受JSON字符串并将其转换为JSON对象。
从这个意义上讲,序列化的JSON列表看起来像
"[ jsonObject1, jsonObject2, jsonObject3, ...]"
(作为字符串),甚至是
"[ {object1Attribute: value}, {object2Attribute: { innerAtt: innerValue } }, {object3Attribute: [ innerJsonObj1, innerJsonObj2 ]} ]"
反序列化后一个字符串将生成对象:
[
{
object1Attribute: value
},
{
object2Attribute: {
innerAtt: innerValue
}
},
{
object3Attribute: [
innerJsonObj1,
innerJsonObj2
]
}
]
您的函数deserialize
实际上不是反序列化某些数据,而是转换字符串数组中的所有可迭代变量。
您可以阅读有关JSON.parse here的更多信息。