【发布时间】:2020-07-15 21:16:51
【问题描述】:
我搜索了 google 和 stackoverflow,但没有找到像 C# 中那样的自动转换库
我需要 dart-flutter 中的一些东西来替代 C# 中的这段代码
string jsonTokenData = "{my token json data}";
TokenModel getTokenModel = Newtonsoft.Json.JsonConvert.DeserializeObject<GetTokenModel>(jsonTokenData);
更新
- 我阅读了文档并且知道如何使用 json 映射模型
- 这个问题问谁知道 Newtonsoft lib 如何在 C# 上工作
- 如果您不了解Newtonsoft:想法是自动将json数据转换为模型,而无需为每个模型编写映射。另外我知道有一个工具可以自动为每个模型创建带有 json 的地图,但仍然使代码变得荒谬。
更新 2:当我从社区收到一个类似问题的建议时,该问题无法回答我的问题。所以这是另一种解释:
我有很多模型,这些模型会根据客户的要求随时更新或向某些模型添加新功能。 所以当更新发生时,我只需要添加已经添加到这些模型中的额外属性,我不需要每次都担心映射、拼写错误或再次使用某些工具来重新生成这些代码。
所以我要求一个带有两个参数的函数
- 第一个是模型的类型
- 第二个是保存数据的json字符串
[那么返回的是所传递类型的对象实例]
举个简单的例子,如果我有这个类:
class Car {
String name;
String type;
}
然后我可以用这种方式保持清洁,而无需使用其他方法:
Car({
this.name,
this.type,
});
factory Car.fromJson(Map<String, dynamic> json) => Car(
name: json["name"],
type: json["type"],
);
Map<String, dynamic> toJson() => {
"name": name,
"type": type,
};
顺便说一句,C# 中的 lib 也处理数组、列表和嵌套类
希望这次能解释清楚
【问题讨论】:
-
你能解决我对我的回答的评论吗?我已经了解你的 C# 方法在做什么,但我想知道我提出的方法的问题是什么。
-
它是 C# .net 的一个库,它自动创建实例并检索给定类型
的属性,然后从 json 字符串中获取数据并使用获取的数据返回该实例 -
它是如何自动执行此操作的?如果 JSON 中包含的属性与对象的字段不匹配怎么办?这个结果与我的答案将达到的结果有何不同?请看我的回答。
-
我想我必须自己做一个库,如果现在有人通过使用 import 'dart:mirrors' 得到答案;它应该可以完成我会尝试的工作
-
“它返回空值以表示不匹配的键”,当没有匹配的字段时,Newtonsoft 会做什么?我试图了解 Newtonsoft 的行为以在 dart 中找到替代方案。如果您不向我详细解释您想要的确切行为,那么如果您不拒绝我提供的任何解决方案,就很难提供帮助。如果您只是要求一个能够实现同等功能的库,那么简单的答案是:它可能不存在。