V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kyonn
V2EX  ›  程序员

咨询个基础反序列化问题.

  •  
  •   kyonn · 16 天前 · 629 次点击

    如下这种针对 dns record 的操作, 因为增删改查操作不同, 导致 server 回复的数据不同, 针对这种情况, 反序列化的结构体要复用一个,使用枚举,可选字段之类的机制. 还是针对增删改查, 都定义单独的反序列化结构体?

    一般常见的实践是怎么样的, 方便的话提供下理由就更好了, 谢谢.

    {
       "request":{
          "operation":"dnsAddRecord",
          "ip":"55.555.55.55"
       },
       "reply":{
          "code":300,
          "detail":"success",
          "record_id":"1a2b3c4d5e"
       }
    }
    
    {
       "request":{
          "operation":"dnsDeleteRecord",
          "ip":"55.555.55.55"
       },
       "reply":{
          "code":300,
          "detail":"success"
       }
    }
    
    
    {
       "request":{
          "operation":"dnsListRecords",
          "ip":"55.555.55.55"
       },
       "reply":{
          "code":300,
          "detail":"success",
          "resource_record":[
             {
                "record_id":"1a2b3c4d5e6f",
                "type":"A",
                "host":"test.namesilo.com",
                "value":"55.555.55.55",
                "ttl":"7207",
                "distance":"0"
             }
             {
                "record_id":"5Brg5hw25jr",
                "type":"CNAME",
                "host":"dev.namesilo.com",
                "value":"testing.namesilo.com",
                "ttl":"7207",
                "distance":"0"
             }
             {
                "record_id":"fH35aH4hsv",
                "type":"MX",
                "host":"namesilo.com",
                "value":"mail.namesilo.com",
                "ttl":"7207",
                "distance":"10"
             }
          ]
       }
    }
    
    
    
    
    2 条回复    2024-12-06 11:42:02 +08:00
    finab
        1
    finab  
       16 天前
    我反正这样写
    ```
    struct ReplyModel {
    var code:Int
    var detail:String

    var record_id:String?
    var resource_record: [RecordModel]?

    var type: ReplyType {
    get {
    if record_id !=nil { return .... }
    }
    }
    }
    ```
    finab
        2
    finab  
       16 天前
    enum ReplyType {
    case id(record_id:String)
    case record(resource_record: [RecordModel])
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2538 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 04:02 · PVG 12:02 · LAX 20:02 · JFK 23:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.