如何从Json.NET序列化的JSON恢复循环引用(例如“ $ id”)?

如何从Json.NET序列化的JSON恢复循环引用(例如“ $ id”)?,第1张

如何从Json.NET序列化的JSON恢复循环引用(例如“ $ id”)?

好的,所以我创建了一个更健壮的方法,该方法将使用$ id和$
ref,因为这实际上是json.net处理循环引用的方式。另外,您还必须在注册ID后获取引用,否则它将找不到被引用的对象,因此我还必须保留请求引用的对象以及它们要设置的属性和ID。他们正在要求。

这是基于lodash /下划线的

(function (factory) {    'use strict';    if (typeof define === 'function' && define.amd) {        define(['lodash'], factory);    } else {        factory(_);    }})(function (_) {    var opts = {        refProp: '$ref',        idProp: '$id',        clone: true    };    _.mixin({        relink: function (obj, optsParam) { var options = optsParam !== undefined ? optsParam : {}; _.defaults(options, _.relink.prototype.opts); obj = options.clone ? _.clone(obj, true) : obj; var ids = {}; var refs = []; function rl(s) {     // we care naught about primitives     if (!_.isObject(s)) {         return s;     }     if (s[options.refProp]) {         return null;     }     if (s[options.idProp] === 0 || s[options.idProp]) {         ids[s[options.idProp]] = s;     }     delete s[options.idProp];     _(s).pairs().each(function (pair) {         if (pair[1]) {  s[pair[0]] = rl(pair[1]);  if (s[pair[0]] === null) {      if (pair[1][options.refProp] !== undefined) {          refs.push({ 'parent': s, 'prop': pair[0], 'ref': pair[1][options.refProp] });      }  }         }     });     return s; } var partiallink = rl(obj); _(refs).each(function (recordedRef) {     recordedRef['parent'][recordedRef['prop']] = ids[recordedRef['ref']] || {}; }); return partiallink;        },        resolve: function (obj, optsParam) { var options = optsParam !== undefined ? optsParam : {}; _.defaults(options, _.resolve.prototype.opts); obj = options.clone ? _.clone(obj, true) : obj; var objs = [{}]; function rs(s) {     // we care naught about primitives     if (!_.isObject(s)) {         return s;     }     var replacementObj = {};     if (objs.indexOf(s) != -1) {         replacementObj[options.refProp] = objs.indexOf(s);         return replacementObj;     }     objs.push(s);     s[options.idProp] = objs.indexOf(s);     _(s).pairs().each(function (pair) {         s[pair[0]] = rs(pair[1]);     });     return s; } return rs(obj);        }    });    _(_.resolve.prototype).assign({ opts: opts });    _(_.relink.prototype).assign({ opts: opts });});

我在这里创建了要点



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5477555.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存