servicestack,Json,Angular,Typescript,servicestack" /> servicestack,Json,Angular,Typescript,servicestack" />

Servicestack请求json正文中没有引号

Servicestack请求json正文中没有引号,json,angular,typescript,servicestack,Json,Angular,Typescript,servicestack,有人能告诉我为什么我在Fiddler中的请求正文中看到引号,而我的servicestack请求字段中没有引号 POST http://10.255.1.180:8087/testvariables/new/ HTTP/1.1 Host: 10.255.1.180:8087 Connection: keep-alive Content-Length: 162 Origin: http://10.255.1.180:8087 User-Agent: Mozilla/5.0 (Windows NT 1

有人能告诉我为什么我在Fiddler中的请求正文中看到引号,而我的servicestack请求字段中没有引号

POST http://10.255.1.180:8087/testvariables/new/ HTTP/1.1
Host: 10.255.1.180:8087
Connection: keep-alive
Content-Length: 162
Origin: http://10.255.1.180:8087
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
content-type: application/json;charset=UTF-8
Accept: */*
Referer: http://10.255.1.180:8087/certFields
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,fr;q=0.6

{"Field":{"Id":67,"Name":"Brightness Reversion","Header":"Brightness Reversion.","Format":"#0.0","Uom":"%","Precision":0,"MapId":8083,"IsMappedToCustomer":false}}
从Typescript/Angular2调用

let body = JSON.stringify(certField);    
let headers = new Headers({ 'Content-Type': 'application/json;charset=utf-8' });

let requestoptions: RequestOptions = new RequestOptions({
            method: RequestMethod.Post,
            url: this._certFieldsUrl + 'new/',
            headers: headers,
            body: '{"Field":'+body+'}'
        })
return this._http.request(new Request(requestoptions))
            .toPromise()
            .then(function (response) {
                return response.json() as CertFieldSaveResponse;
            })
            .catch(this.handleError);
请求类

public class CertFieldUpdateRequest : IReturn<TestVariableResponse>
    {
        public string Field { get; set; }

    }
在服务内部的POST方法中,request.Field的值为:

    {Id:67,Name:Brightness Reversion,Header:Brightness Reversion.,Format:#0.0,Uom:%,Precision:0,MapId:8083,IsMappedToCustomer:false}

这是因为您的主体实际上是一个完整的json对象,而不是json对象中的字符串。因此,要么:

   let requestoptions: RequestOptions = new RequestOptions({
        method: RequestMethod.Post,
        url: this._certFieldsUrl + 'new/',
        headers: headers,
        body: {Field : JSON.stringify(body)}
    })
或者使您的代码类具有属性:

   public class CertFieldUpdateRequest : IReturn<TestVariableResponse>
   {
    public Field Field { get; set; }

   }

   public class Field
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Header { get; set; }
        public string Format { get; set; }
        ///etc...
    }
公共类CertFieldUpdateRequest:IReturn
{
公共字段{get;set;}
}
公共类字段
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串头{get;set;}
公共字符串格式{get;set;}
///等等。。。
}

因为一个是原始输出,另一个是“已清理”。没有引号的JSON是无效的JSON。请更改
。然后(函数(响应){
。然后((响应)=>{
,然后查看并告知。就像Marc说的,如果最后显示的JSON是您发布的,它将不起作用。请尝试:
var body={Field:body}
。然后
JSON.stringify(body)
@jbrabant您的问题解决了吗?@joelharkes没有。您看到的最后一个JSON不是我发布的。它是我在servicestack服务的POST方法中的调试监视中看到的。
   public class CertFieldUpdateRequest : IReturn<TestVariableResponse>
   {
    public Field Field { get; set; }

   }

   public class Field
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Header { get; set; }
        public string Format { get; set; }
        ///etc...
    }