栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从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 });});

我在这里创建了要点



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485416.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号