Typescript Deserialize Json To Class

  
Active2 years, 9 months ago

This question already has an answer here:

This sample deserializes JSON to an object. Json.NET Documentation. Json.NET Documentation. Serializing JSON. Deserialize JSON from a file. Populate an Object. ConstructorHandling setting. JsonConverterAttribute on a class. JsonConverterAttribute on a property.

I receive a JSON object from an AJAX call to a REST server. This object has property names that match my TypeScript class (this is a follow-on to this question). What is the best way to initialize. Generate c# classes from a json string or url. Json2csharp is joining forces with quicktype to offer new and improved features including JSON attributes, PascalCase properties, modern C# syntax (nullables, expression members), Dictionary detection, class deduplication, and more. Try quicktype now.

By modeling designs in their future environments, you’ll dive into the creative flow of design development. Solve design problems by exploring how your model interacts with real-life elements such as light and shadow. Lumion Pro 8.5 OverviewAccelerate your 3D design workflows by modeling your ArchiCAD project while seeing it in Lumion’s real-time, breathtaking environments. The new LiveSync for ArchiCAD plugin lets you instantly establish a live connection for simultaneous modeling and rendering. Lumion 3d full version free download. It is full offline installer standalone setup of Lumion Pro 8.5 Free Download for supported version of windows.

  • How do I initialize a TypeScript object with a JSON object 14 answers

I've done quite some research, but I'm not totally satisfied with what I found. Just to be sure here's my question:What is actually the most robust and elegant automated solution for deserializing JSON to TypeScript runtime class instances?

Dec 14, 2016  The best solution I found when dealing with Typescript classes and json objects: add a constructor in your Typescript class that takes the json data as parameter. In that constructor you extend your json object with jQuery, like this: $.extend( this, jsonData). $.extend allows keeping the javascript prototypes while adding the json object's properties. Jul 20, 2019  Join GitHub today. TypeScript 92.3% JavaScript 7.7% Use Git or checkout with SVN using the web URL. Launching GitHub Desktop. If nothing happens, download GitHub Desktop and try again. Launching GitHub Desktop. If nothing happens, download GitHub. JSON Utils is a site for generating C#, VB.Net, Javascript, Java and PHP classes from JSON. It will also clean up your JSON and show a data viewer to assist you while you are developing JSON Utils: Generate C#, VB.Net, SQL Table, Java and PHP from JSON. Quicktype generates types and helper code for reading JSON in C#, Swift, JavaScript, Flow, Python, TypeScript, Go, Rust, Objective-C, Kotlin, C and more. Customize online with advanced options, or download a command-line tool.

Say I got this class:

And say I got this JSON string for deserialization:

What's the best and most maintainable solution for getting an instance of a Foo class with the name set to 'John Doe' and the method GetName() to work? I'm asking very specifically because I know it's easy to deserialize to a pure>1515 gold badges65 silver badges125 bronze badges

KlausKlaus

marked as duplicate by Louis, Machavity, Samuel Liew, Paul Roub, Brock AdamsDec 19 '16 at 3:31

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

5 Answers

This question is quite broad, so I'm going to give a couple of solutions.

Solution 1: Helper Method

Here's an example of using a Helper Method that you could change to fit your needs: Strategic management models pdf.

Then using it:

Advanced Deserialization

This could also allow for some custom deserialization by adding your own fromJSON method to the class (this works well with how JSON.stringify already uses the toJSON method, as will be shown):

Then using it:

Solution 2: Base Class

Another way you could do this is by creating your own base class:

Then using it:

There's too many different ways to implement a custom deserialization using a base class so I'll leave that up to how you want it.

David SherretDavid Sherret
60.4k18 gold badges133 silver badges139 bronze badges

You can now use Object.assign(target, ..sources). Following your example, you could use it like this:

Object.assign is part of ECMAScript 2015 and is currently available in most modern browsers.

Hugo LeaoHugo Leao

What is actually the most robust and elegant automated solution for deserializing JSON to TypeScript runtime class instances?

Using property decorators with ReflectDecorators to record runtime-accessible type information that can be used during a deserialization process provides a surprisingly clean and widely adaptable approach, that also fits into existing code beautifully. It is also fully automatable, and works for nested objects as well.

An implementation of this idea is TypedJSON, which I created precisely for this task:

John WeiszJohn Weisz
14.5k6 gold badges53 silver badges95 bronze badges
amcdnlamcdnl
4,54612 gold badges50 silver badges86 bronze badges

The best solution I found when dealing with Typescript classes and json objects: add a constructor in your Typescript class that takes the json data as parameter. In that constructor you extend your json object with jQuery, like this: $.extend( this, jsonData). $.extend allows keeping the javascript prototypes while adding the json object's properties.

In your ajax callback, translate your jsons in a your typescript object like this:

If you don't add the constructor, juste call in your ajax callback:

..but the constructor will be useful if you want to convert the children json object too. See my detailed answer here.

Typescript Deserialize Json To Class C

Community
Anthony BrenelièreAnthony Brenelière
25.9k12 gold badges31 silver badges44 bronze badges

Not the answer you're looking for? Browse other questions tagged jsontypescriptdeserialization or ask your own question.

JSON Deserialization extension

typescript-generator can generate TypeScript classes but when you parse JSON you get simple objects that are not instances of any classes.

You can use JSON deserialization extension - cz.habarta.typescript.generator.ext.JsonDeserializationExtension - which generates methods that allow to 'deserialize' JSON data into instances of generated classes.It adds 'copy' methods to classes which receive pure object, create new instance of the class and recursivelly copy properties from data object to the instance of class.

Let's say we have following class User:

then this extension will add (in principal) following fromData method:

This is simplified sample, in fact it also tests data for null and undefined and it also handles inheritance.

This User example contains only properties of simple types but typescript-generator copy all constructs that it generates like arrays, objects, discriminated union types, generics etc.

Usage

Typescript Convert Json To Class Object

Configuration of this extension in little bit verbose in Maven but you can just copy relevant part from following snippets to your pom.xml or adapt it to your build system.

If you are also generating REST application client you can let this extension to deserialize data from HTTP response. This can be turned on using useJsonDeserializationInJaxrsApplicationClient parameter.

Typescript Deserialize Json To Class File

Adding methods to generated classes

Typescript Deserialize Json To Class Converter

If you have generated classes and JSON data deserialized into instances of these classes you can add your custom methods to these classes. Here is an example: