Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
json2typescript:如何序列化属性的名称而不是基类字段的名称_Json_Angular_Typescript - Fatal编程技术网

json2typescript:如何序列化属性的名称而不是基类字段的名称

json2typescript:如何序列化属性的名称而不是基类字段的名称,json,angular,typescript,Json,Angular,Typescript,请看下面的代码。我希望序列化的结果是: { "origin": { "x": 1, "y": 2 }, "size": { "width": 3, "height": 4 } } 而是 { "origin": { "a": 1, "b": 2 }, "size": { "a": 3, "b": 4 } }

请看下面的代码。我希望序列化的结果是:

{
    "origin": {
        "x": 1,
        "y": 2
    },
    "size": {
        "width": 3,
        "height": 4
    }
}
而是

{
    "origin": {
        "a": 1,
        "b": 2
    },
    "size": {
        "a": 3,
        "b": 4
    }
}
如何使json2typescript使用Coord和Size类中的属性名称,而不是使用(公共)基类对中的属性名称

我试图从Pair中删除@Json装饰,但没有序列化任何坐标和大小

@JsonObject("Pair")
export class Pair2
{
    @JsonProperty("a", Number)
    protected a: number;
    @JsonProperty("b", Number)
    protected b: number;

    constructor(a?: number, b?: number)
    {
        this.a = a;
        this.b = b;
    }
}

@JsonObject("Coord")
export class Coord2 extends Pair2
{
    @JsonProperty("x", Number)
    public get x(): number { return this.a; }
    public set x(value: number) { this.a = value; }

    @JsonProperty("y", Number)
    public get y(): number { return this.b };
    public set y(value: number) { this.b = value };

    constructor(x?: number, y?: number)
    {
        super(x, y);
    }
}

@JsonObject("Size")
export class Size2 extends Pair2
{
    @JsonProperty("width", Number)
    public get width(): number { return this.a; }
    public set width(value: number) { this.a = value; }

    @JsonProperty("height", Number)
    public get height(): number { return this.b };
    public set height(value: number) { this.b = value };

    constructor(width?: number, height?: number)
    {
        super(width, height);
    }
}

@JsonObject("Rectangle")
export class Rectangle2
{
    @JsonProperty("origin", Coord2)
    origin: Coord2;
    @JsonProperty("size", Size2)
    size: Size2;

    constructor(origin: Coord2, size: Size2)
    {
        this.origin = origin;
        this.size = size;
    }
}

let jsonConvert: JsonConvert = new JsonConvert();
jsonConvert.operationMode = OperationMode.LOGGING; // print some debug data
jsonConvert.ignorePrimitiveChecks = false; // don't allow assigning number to string etc.
jsonConvert.valueCheckingMode = ValueCheckingMode.DISALLOW_NULL; // never allow null

let origin = new Coord2(1, 2);
let size = new Size2(3, 4);
let rectangle = new Rectangle2(origin, size);

let rectangleJsonObj = jsonConvert.serialize(rectangle);
console.log(rectangleJsonObj);
let rectangleStr = JSON.stringify(rectangleJsonObj);
console.log(rectangleStr);

我解决问题的方法是:

  • 我没有使用json2typescript库,而是使用了JSON.stringify和JSON.parse
  • 我使用toJSON()返回一个具有宽度和高度的对象,如下所示:

  • 我解决问题的方法是:

  • 我没有使用json2typescript库,而是使用了JSON.stringify和JSON.parse
  • 我使用toJSON()返回一个具有宽度和高度的对象,如下所示:
  • private toJSON = () =>
    {
        return {
            width: this.width,
            height: this.height
        }
    }