• 使用lua做序列化和反序列化


    -- lua对象序列化
    function serialize(obj)
        local lua = ""
        local t = type(obj)
        if t == "number" then
            lua = lua .. obj
        elseif t == "boolean" then
            lua = lua .. tostring(obj)
        elseif t == "string" then
            lua = lua .. string.format("%q", obj)
        elseif t == "table" then
            lua = lua .. "{
    "
            for k, v in pairs(obj) do
                lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",
    "
            end
            local metatable = getmetatable(obj)
            if metatable ~= nil and type(metatable.__index) == "table" then
                for k, v in pairs(metatable.__index) do
                    lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",
    "
                end
            end
            lua = lua .. "}"
        elseif t == "nil" then
            return nil
        else
            error("can not serialize a " .. t .. " type.")
        end
        return lua
    end
    setfenv(serialize, {type = _G.type, tostring = _G.tostring, error = _G.error})
    
    -- lua对象反序列化
    function unserialize(lua)
        local t = type(lua)
        if t == "nil" or lua == "" then
            return nil
        elseif t == "number" or t == "string" or t == "boolean" then
            lua = tostring(lua)
        else
            error("can not unserialize a " .. t .. " type.")
        end
        lua = "return " .. lua
        local func = loadstring(lua)
        if func == nil then return nil end
        return func()
    end
    setfenv(unserialize, {type = _G.type, tostring = _G.tostring, error = _G.error, loadstring = _G.loadstring})

    使用方法:

    local tbl = {a = 1, b = 2}

    local seri_str = serialize(tbl)

    local new_tbl = unserialize(seri_str)

    转载请注明出处, from 博客园HemJohn

  • 相关阅读:
    C#计算某一些任务的执行时间(消耗时间)
    C#打印条码的几种方式
    使用escape编码地址栏中的中文字符
    SQL 批量删除数据表
    弹出层并锁定页面
    后台输出HTML
    C# 十进制与十六进制互转
    SQL判断临时表是否存在
    SQL Server 字符串处理
    Vue文件跳转$router传参数
  • 原文地址:https://www.cnblogs.com/HemJohn/p/6409633.html
Copyright © 2020-2023  润新知