YYModel之模型字段映射以及模型包含

上一篇我们说了YYModel的简单使用NSDictionary转Model.json转model.

这一篇我们说说YYModel的映射以及”包含”.

最简单的json就是下面这种,可以直接调用YYModel的类方法,来完成模型转换:

{
    "name" : "haha",
    "age" : "18"
}

1.后台字段名和模型内字段名不相同的时候的转模型

最快的开发形式是后台接开发完毕之后再开始接.然而我们写的模型的字段和后台的字段不是每次都一样的
拿上面的name举个例子,比如后台的字段是title,我们可以在.m中

///以字典的方式返回.key是咱们写的模型中的属性名,value是我们想要映射的后台给的字段名.
+ (nullable NSDictionary<NSString *, id> *)modelCustomPropertyMapper {
    return @{
        @"name" : @"title",
    };
}
/// 如果想要模型通用.比如后台返回的有时候叫Title.有时候叫Text.其实都是一个东西那么我们可以.value用数组包含NSString的方式做映射
+ (nullable NSDictionary<NSString *, id> *)modelCustomPropertyMapper {
    return @{
        @"name" : @[@"title" ,@"Text"],
    };
}

2.当json数据是对象包含对象形式的字典转模型.

一般的网络数据都是json里面不单单是字典(对于json来说应该是叫”对象”).
也有可能是数组或者是对象套对象的形式类似于:

{
    "title" : "Title1"
    "movie" : {
        "name" : "movieName",
        "contentUrl" : "http://www.xxx.com",
    }
}

那么我们可以使用

/// 加入movie对应的是一个MovieModel的模型类
+ (nullable NSDictionary<NSString *, id> *)modelContainerPropertyGenericClass {
    return @{
        @"movie" : [MovieModel class],
    };
}
// 对于这个[MovieModel class]
//  return @{
//      @"movie" : [MovieModel class],
//  };
//有三种使用方式
//1.@"movie" : [MovieModel class]
//2.@"movie" : MovieModel.class
//3.@"movie" : "MovieModel"

对于三种”模型包含模型”的类方法里头.我觉得最好还是上头两种.第三种的话类似于NSClassFromString.动态获取类的方式并不安全.有可能无法正常转换.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果数据模型希望通过前端表单设置字段映射关系来获取,可以考虑使用动态数据模型或者基于元数据的数据模型。 1. 动态数据模型:动态数据模型是指在运行时动态生成数据模型,可以根据用户输入的字段映射关系来生成相应的数据模型。在实现上,可以使用Java的反射机制或者动态代理来实现动态数据模型。具体实现过程如下: ```java public class DynamicModel { private Map<String, String> properties = new HashMap<>(); public void addProperty(String name, String type) { properties.put(name, type); } public Map<String, String> getProperties() { return properties; } public void setProperties(Map<String, String> properties) { this.properties = properties; } } ``` 2. 基于元数据的数据模型:基于元数据的数据模型是指在数据模型中添加元数据信息,用于描述数据模型包含字段、类型和约束等信息。在实现上,可以使用Java的注解或者XML配置文件来实现基于元数据的数据模型。具体实现过程如下: ```java public class User { @Column(name = "id", type = "int", primaryKey = true) private int id; @Column(name = "name", type = "varchar(50)", nullable = false) private String name; @Column(name = "age", type = "int") private int age; //getter and setter } public @interface Column { String name() default ""; String type() default ""; boolean primaryKey() default false; boolean nullable() default true; } ``` 在以上两种方式中,都可以根据用户输入的字段映射关系来生成相应的数据模型,并将数据存储到数据库中。需要注意的是,动态数据模型和基于元数据的数据模型都需要进行合理的数据类型转换和数据校验,以保证数据的准确性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值