CaiJingLong / json2dart

BSD 2-Clause "Simplified" License
135 stars 48 forks source link

Key和子孙Key相同的问题 #1

Open ZzZxL opened 6 years ago

ZzZxL commented 6 years ago
{
  "itemList": [
    {
      "data": {
        "itemList": [
          {
            "data": {}
          }
        ]
      }
    }
  ]
}

类似于这种json, 转换得到的结果:

@JsonSerializable()
  class ItemList extends Object {

  @JsonKey(name: 'data')
  Data data;

  ItemList(this.data,);

  factory ItemList.fromJson(Map<String, dynamic> srcJson) => _$ItemListFromJson(srcJson);

  Map<String, dynamic> toJson() => _$ItemListToJson(this);

}

@JsonSerializable()
  class Data extends Object {

  @JsonKey(name: 'itemList')
  List<ItemList> itemList;

  Data(this.itemList,);

  factory Data.fromJson(Map<String, dynamic> srcJson) => _$DataFromJson(srcJson);

  Map<String, dynamic> toJson() => _$DataToJson(this);

}

@JsonSerializable()
  class ItemList extends Object {

  @JsonKey(name: 'data')
  Data data;

  ItemList(this.data,);

  factory ItemList.fromJson(Map<String, dynamic> srcJson) => _$ItemListFromJson(srcJson);

  Map<String, dynamic> toJson() => _$ItemListToJson(this);

}

@JsonSerializable()
  class Data extends Object {

  Data();

  factory Data.fromJson(Map<String, dynamic> srcJson) => _$DataFromJson(srcJson);

  Map<String, dynamic> toJson() => _$DataToJson(this);

}

同个dart文件夹里ItemList和Data类重复。

CaiJingLong commented 6 years ago

这个问题从创建项目时就有,甚至有其他的已知问题 但作为一个简易的转换器而言,能应对大部分情况已经足够了

json_serializable 本身提供了很多高阶注解的用法,自定义选项,也支持json到dart的转换,如果真的有需求,可以考虑直接使用库本身提供的功能

做这个库的本意只是因为当时json_serializable 0.X.X版本没有提供转化器


当然 这个问题有时候也会影响我自己的使用, 等我腾出时间来考虑增加一个配置方案来添加同名类的配置选项

MrReN commented 5 years ago

不过还是感谢,提供本库

brandon3343 commented 5 years ago

这个问题从创建项目时就有,甚至有其他的已知问题 但作为一个简易的转换器而言,能应对大部分情况已经足够了

json_serializable 本身提供了很多高阶注解的用法,自定义选项,也支持json到dart的转换,如果真的有需求,可以考虑直接使用库本身提供的功能

做这个库的本意只是因为当时json_serializable 0.X.X版本没有提供转化器

当然 这个问题有时候也会影响我自己的使用, 等我腾出时间来考虑增加一个配置方案来添加同名类的配置选项

能不能就是在创建类的时候,把当前类名放到集合里面,每次创建类之前都先判断一下这个类是否已经存在了,存在了就在类名后+1(重复一次就加一次1),看了一下代码,有点懵。。。好像不是很好拓展,只能靠你了