Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Javascript ServiceStack客户端序列化错误_Javascript_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack_Aurelia - Fatal编程技术网 servicestack,aurelia,Javascript,servicestack,Aurelia" /> servicestack,aurelia,Javascript,servicestack,Aurelia" />

Javascript ServiceStack客户端序列化错误

Javascript ServiceStack客户端序列化错误,javascript,servicestack,aurelia,Javascript,servicestack,Aurelia,所以我在两个视图之间有一个主/细节场景。母版页显示一个列表,单击其中一个项目后,我通过Aurelia中的EventAggregator将一条消息发送到子视图,并使用反序列化dto(来自母版的选定项目)作为消息的有效负载 但是,当我尝试将此项作为子对象中后续请求的参数传递(以获取其他信息)时,负载对象无法序列化 硕士学位: import { JsonServiceClient } from "servicestack-client"; import { ListPendingHolding

所以我在两个视图之间有一个主/细节场景。母版页显示一个列表,单击其中一个项目后,我通过Aurelia中的EventAggregator将一条消息发送到子视图,并使用反序列化dto(来自母版的选定项目)作为消息的有效负载

但是,当我尝试将此项作为子对象中后续请求的参数传递(以获取其他信息)时,负载对象无法序列化

硕士学位:

import { JsonServiceClient } from "servicestack-client";
import {
    ListPendingHoldingsFiles,
    ListPendingHoldingsFilesResponse,
    SendHoldings,
    PositionFileInfo
} from "../holdingsManager.dtos";
import { inject, singleton } from "aurelia-framework";
import { Router } from "aurelia-router";
import { EventAggregator } from "aurelia-event-aggregator";
import { GetPendingPositionMessage } from "../common/GetPendingPositionMessage";

@singleton()
@inject(Router, EventAggregator)
export class Pending {
    router: Router;
    positions: PositionFileInfo[];
    client: JsonServiceClient;
    eventAgg: EventAggregator;

    constructor(router, eventAggregator) {
        this.router = router;
        this.eventAgg = eventAggregator;
        this.client = new JsonServiceClient('/');
        var req = new ListPendingHoldingsFiles();
        this.client.get(req).then((getHoldingsResponse) => {
            this.positions = getHoldingsResponse.PositionFiles;
        }).catch(e => {
            console.log(e); // "oh, no!"
        });
    }

    openHoldings(positionInfo) {
        this.eventAgg.publish(new GetPendingPositionMessage(positionInfo));
        this.router.navigate('#/holdings');
    }
}
Child.ts:

import { JsonServiceClient } from "servicestack-client";
import { inject, singleton } from "aurelia-framework";
import { Router } from 'aurelia-router';
import { EventAggregator } from "aurelia-event-aggregator";
import { GetPendingPositionMessage } from "../common/GetPendingPositionMessage";
import {
    GetPendingHoldingsFile,
    GetPendingHoldingsFileResponse,
    Position,
    PositionFileInfo
} from "../holdingsManager.dtos";

@singleton()
@inject(Router, EventAggregator)
export class Holdings {
    router: Router;
    pendingPositionFileInfo: PositionFileInfo;
    position: Position;
    client: JsonServiceClient;
    eventAgg: EventAggregator;

    constructor(router, eventAggregator) {
        this.router = router;
        this.eventAgg = eventAggregator;
        this.eventAgg.subscribe(GetPendingPositionMessage,
            message => {
                this.pendingPositionFileInfo = message.fileInfo;
            });
    }

    activate(params, routeData) {
        this.client = new JsonServiceClient('/');
        var req = new GetPendingHoldingsFile();
        req.PositionToRetrieve = this.pendingPositionFileInfo;
        this.client.get(req).then((getHoldingsResponse) => {
            this.position = getHoldingsResponse.PendingPosition;
        }).catch(e => {
            console.log(e); // "oh, no!"
        });
    }
}
因此,当子级激活并尝试发送请求“GetPendingHoldingFile”时,就会发生错误

Failed to load resource: the server responded with a status of 500 (NullReferenceException)
我已经验证了子对象中的this.pendingPositionFileInfo不是null或空的,并且在服务器端没有接收到该对象(它是null)。我是奥雷利亚的新手,对Javascript不是很有经验,所以我肯定错过了一些东西,任何建议都将不胜感激

编辑1


我与ServiceStack的交互方式似乎有问题。我将serviceStack的4.5.6版与serviceStack客户端一起使用@^0.0.17。我尝试创建一个新的dto副本(PositionFileInfo)并从父视图复制所有值,只是为了确保没有发生我不知道的javascript类型转换异常,但即使使用新的dto,Web服务仍然会收到一个空请求。

从“client.get(…)”切换到“client.post(…)“解决了这个问题。显然,试图在URL中序列化对象不是一个好计划。

此处不要使用事件聚合器。。。路由器过于复杂和冗余。只需保存当前记录
this.positionInfo=positionInfo,然后路由到您的孩子,让孩子导入/注入父项并获取当前记录。这里有几个类似情况的演示:感谢提示,不幸的是,这并不能解决序列化问题。如果孩子有两个或更多可能的“父项”,您还会推荐此解决方案吗?似乎构造函数会被注入的可能的父视图模型弄得乱七八糟。@LStarky我决定使用这里描述的StateStore对象,它将比我上面的解决方案和将父视图模型注入子视图模型更干净:这绝对是一个更好的计划!我在你的代码中没有注意到,但你完全正确。