【问题标题】:auto converting json to object in dart flutter在飞镖颤动中自动将json转换为对象
【发布时间】: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 中找到替代方案。如果您不向我详细解释您想要的确切行为,那么如果您不拒绝我提供的任何解决方案,就很难提供帮助。如果您只是要求一个能够实现同等功能的库,那么简单的答案是:它可能不存在。

标签: flutter dart


【解决方案1】:

只需像这样导入 dart:convert library

 import 'dart:convert';

然后使用此代码:

json.decode(json)

看看这个链接:dart:convert library

【讨论】:

    【解决方案2】:

    做一些研究可以让你不要在这里问 SO。

    JSON 解码在 flutter site 上有详细记录。它指向使用jsonDecode function,它解析String并返回生成的JSON对象。

    String jsonTokenData = "{my token json data}";
    dynamic json = jsonDecode(jsonTokenData);
    

    您可以将解码后的对象传递给对象的自定义构造函数,例如 .fromJson,它接受 Map/List,具体取决于您的 JSON 数据。

    如果由于某种原因创建一个接受 JSON 数据的构造函数需要太多的工作/输入,或者如果你自己做这件事有困难,你可以使用 JSON to Dart 服务,比如this

    【讨论】:

    • @AbduImam 这有什么不同? Newtonsoft.Json.JsonConvert.DeserializeObject&lt;GetTokenModel&gt;(jsonTokenData); 做了完全相同的事情,只是您可以指定要反序列化的对象。在 dart 中无法选择要反序列化的对象。除了 jsonDecode 之外,创建自定义构造函数是从 JSON 创建对象的唯一方法。
    • 是的,我们仍然需要进行映射,这是我需要避免的。所以我要问的是是否有一个库,或者有人如何在 C# 的 dot net 框架中使用 System.Reflection 等人员创建动态映射。
    • @AbduImam 我仍然不清楚这些差异。您应该尝试将您正在尝试做的事情放在通用或 dart 术语中,因为不一定有大量的开发人员可以回答您的问题,他们都精通 dart 和 C#
    • 是的,我确实更新了解释 Newtonsoft 工作原理的问题
    • @AbduImam Newtonsoft 如何在内部做到这一点?它对 JSON 数据有什么作用,可以将数据归因于某些属性?为什么要创建一个构造函数来处理jsonDecode 返回的问题?
    猜你喜欢
    • 2021-05-01
    • 2019-08-13
    • 1970-01-01
    • 2021-04-12
    • 2020-05-12
    • 2020-08-11
    • 2020-02-11
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多