Skip to main content
Home

Built and signed on GitHub Actions

Works with
This package works with Node.js, Deno, BrowsersIt is unknown whether this package works with Cloudflare Workers, Bun
It is unknown whether this package works with Cloudflare Workers
This package works with Node.js
This package works with Deno
It is unknown whether this package works with Bun
This package works with Browsers
JSR Score100%
Published10 months ago (0.7.0)

Restore references after parsing JSON

retrocycle

Restore references after parsing JSON

Example (.NET server)

Server

Serialization using NewtonsoftJson

builder.Services.AddControllers()
                .AddNewtonsoftJson(options => {
                    options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
                    options.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.All;
                });

Controller

public class Complex
{
	public string Name { get; set; } = string.Empty;
	public List<Complex> Children { get; set; } = [];
}

[ApiController]
public class SomeController : ControllerBase
{
	[Route("api/some/complexObject")]
	[HttpGet]
	public IActionResult GetComplexObject() {
		Complex complextObject = new();
		complextObject.Name = "Root";
		complextObject.Children.Add(complextObject);
		complextObject.Children.Add(new() { Name = "Child" });
		return Ok(complextObject);
	}
}

Client

fetch('api/some/complexObject')
	.then(resp => resp.json())
	.then(refComplexObj => {
		console.log(refComplexObj);
		/*
			{
				"$id": "1",
				"Name": "Root",
				"Children": {
					"$id": "2",
					"$values": [{
							"$ref": "1"
						}, {
							"$id": "3",
							"Name": "Child",
							"Children": {
								"$id": "4",
								"$values": []
							}
						}
					]
				}
			}
		*/
		let complexObj = retrocycle(refComplexObj);
		console.log(complexObj);
		/*
			{
				"Name": "Root",
				"Children": [{
						"Name": "Root",
						"Children": [{
								...
							}, {
								"Name": "Child",
								"Children": []
							}
						]
					}, {
						"Name": "Child",
						"Children": []
					}
				]
			}
		*/
		return complexObj;
	})
Built and signed on
GitHub Actions

Report package

Please provide a reason for reporting this package. We will review your report and take appropriate action.

Please review the JSR usage policy before submitting a report.

Add Package

deno add jsr:@mro/retrocycle

Import symbol

import * as retrocycle from "@mro/retrocycle";
or

Import directly with a jsr specifier

import * as retrocycle from "jsr:@mro/retrocycle";

Add Package

pnpm i jsr:@mro/retrocycle
or (using pnpm 10.8 or older)
pnpm dlx jsr add @mro/retrocycle

Import symbol

import * as retrocycle from "@mro/retrocycle";

Add Package

yarn add jsr:@mro/retrocycle
or (using Yarn 4.8 or older)
yarn dlx jsr add @mro/retrocycle

Import symbol

import * as retrocycle from "@mro/retrocycle";

Add Package

vlt install jsr:@mro/retrocycle

Import symbol

import * as retrocycle from "@mro/retrocycle";

Add Package

npx jsr add @mro/retrocycle

Import symbol

import * as retrocycle from "@mro/retrocycle";

Add Package

bunx jsr add @mro/retrocycle

Import symbol

import * as retrocycle from "@mro/retrocycle";