是否有一种标准化的方法来存储JSON中的类,然后从字符串中再次将它们转换回类?例如,我可能有一个类型为Questions的对象数组.我想将其序列化为JSON并将其发送到(例如)一个JavaScript页面,该页面将JSON字符串转换回对象.但它应该能够使用我已经拥有的构造函数将问题转换为Question类型的对象:
function Question(id, title, description){ }
有没有标准化的方法来做到这一点?我有一些关于如何做的想法,但重新发明轮子等等.
澄清我的意思是类:几种语言可以使用类(JAVA,PHP,C#),它们通常会通过JSON与JavaScript通信.在服务器端,数据存储在类的实例中,但是当您序列化它们时,这会丢失.反序列化后,最终会得到一个对象结构,该结构不指示您拥有的对象类型.JavaScript支持原型OOP,您可以从构造函数创建对象,这些对象将成为构造函数的类型,例如上面的问题.我的想法是让类实现一个JSONType接口,它有两个函数:
public interface JSONType{ public String jsonEncode();//Returns serialized JSON string public static JSONType jsonDecode(String json); }
例如,Question类将实现JSONType,因此当我序列化我的数组时,它将为该数组中的每个元素调用jsonEncode(它检测到它实现了JSONType).结果将是这样的:
[{typeof:"Question", id:0, title:"Some Question", description:"blah blah blah"}, {typeof:"Question", id:0, title:"Some Question", description:"blah blah blah"}, {typeof:"Question", id:0, title:"Some Question", description:"blah blah blah"}]
然后javascript代码将看到typeof属性,并寻找一个Question函数,然后调用Question对象上的静态函数,类似于上面的接口(是的,我知道这里有一个XSS安全漏洞).jsonDecode对象将返回Question类型的对象,并将递归地解码JSON值(例如,可能存在注释值,这是注释数组).
您必须创建自己的序列化程序来检测Question
(和其他类)并将它们序列化为构造函数调用而不是JSON对象表示法.请注意,您需要一种将对象映射到构造函数调用的方法.(哪些属性来自哪些参数?)
其他人:通过类,他意味着用作构造函数的函数; 我认为他正试图保留原型.