typescript - Konvertera json till klassinstans med class-transformer
Jag skulle vilja skapa en instans av Customer-klassen från ett Json-objekt.
Men genom att använda plainToInstance-funktionen från class-transformer har jag inte den korrekta klassinstansen som ett typ-säkert TypeScript-objekt.
Vad gör jag fel?
Import
import { plainToInstance } from 'class-transformer';
Kund JSON
const json = `{
"id": "1",
"name": "Jogn",
"surname": "Doe",
"email": "[email ",
"phone": "123456789"
}
}
`;
Kundklassdefinition
import { Field, ObjectType, Directive, ID } from '@nestjs/graphql';
import { Address } from './address';
@ObjectType()
@Directive('@key(fields: "id")')
export class Customer {
@Field(() => ID)
id: string;
@Field()
name: String;
@Field({nullable: true})
surname?: String;
@Field()
email: String;
@Field({nullable: true})
phone?: String;
@Field()
customerType: String;
@Field()
customerStatus: String;
@Field(() => [Address], { nullable: true })
addresses?: [Address]
}
Transformation från Json till Customer-instans
let customer : Customer = plainToInstance(Customer, json) as Customer;
console.log('customer.email);
Konsolresultat
Customer email: undefined
Så jag kunde inte få kundens e-post här
Detta är vad jag har när jag loggar hela kundvariabeln
console.log(customer);
{
"id": "1",
"name": "Jogn",
"surname": "Doe",
"email": "[email ",
"phone": "123456789"
}
Test med att skapa Customer-instansen direkt
var x = new Customer();
x.id = "123";
console.log(x)
Så, nu ser objektet korrekt ut i konsolen
Customer { id: '123' }
Svar #1
Du måste skicka ett JSON-objekt till plainToInstance - inte en sträng.
det vill säga din json-variabel bör vara
const json = {
id: '1',
name: 'Jogn',
surname: 'Doe',
email: '[email ',
phone: '123456789',
};
här är ett fungerande Stackblitz-exempel
Svar #2
Den andra egenskapen av plainToInstance bör vara ett vanligt objekt, så du måste tolka din JSON-sträng till ett objekt:
let customer = plainToInstance(Customer, JSON.parse(json))
