API 响应格式错误的 JSON 字符串

API responding with Malformed JSON string

我正在尝试 post 数据到 API 但我收到一条错误消息,“格式错误的 JSON 字符串”。我根据给定的有效负载构建了我的对象,该对象已经过 python 测试并且工作正常。

根据我下面的代码,我做错了什么?

我收到的原始 JSON 有效载荷,我需要从中构建

{'i_customer': 1, 'custom_fields_values': [{'i_custom_field': 1, 'db_value': '2'}]}

我的代码尝试:

CustomField custom = new CustomField()
{
    CustomerId = customerId,
    CustomFieldsValues = new CustomFieldsValues()
    {
        CustomFieldId = _portaClient._CustomFieldId,
        DbValue = customFieldId
    }
};

var json = JsonConvert.SerializeObject(custom);
string url = string.Format(endpoint);
var client = new RestClient(url)
{
    Timeout = -1
};

var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("params", "{\"information\":" + json +  "\"}");
--              
var response = client.Execute(request);

以上代码产生了这个负载:

{"i_customer":1,"custom_fields_values":{"i_custom_field":1,"db_value":"2"}}

API错误响应:

Error: "
{"faultcode":"malformed_json_string","faultstring":"Malformed JSON string"}"

这是我的模型

public class CustomField
{
    [JsonProperty(PropertyName = "i_customer")]
    public int? CustomerId { get; set; }

    [JsonProperty(PropertyName = "custom_fields_values")]
    public CustomFieldsValues CustomFieldsValues { get; set; }
}

public class UpdateCustomerCustomFieldsValuesResponse
{
    [JsonProperty(PropertyName = "i_customer")]
    public int? CustomerId { get; set; }
}

public class CustomFieldsValues
{
    [JsonProperty(PropertyName = "i_custom_field")]
    public int CustomFieldId { get; set; }

    [JsonProperty(PropertyName = "db_value")]
    public string DbValue { get; set; }
}

我该如何解决这个问题?

FWIW,我认为错误不准确。 “格式错误”具有非常具体的含义,不适用于此处,因为您的结果是 well-formed 和有效的 JSON 数据。这个有效的 JSON 结果不是按照他们的系统想要的方式构建的,这仍然是一个错误......只是与发送“格式错误”JSON.[=15= 不同类型的错误]

要解决这个问题,这个 CustomField class:

public class CustomField
{
    [JsonProperty(PropertyName = "i_customer")]
    public int? CustomerId { get; set; }

    [JsonProperty(PropertyName = "custom_fields_values")]
    public CustomFieldsValues CustomFieldsValues { get; set; }
}

需要 CustomFieldsValues 属性 显示为数组或列表:

public class CustomField
{
    [JsonProperty(PropertyName = "i_customer")]
    public int? CustomerId { get; set; }

    [JsonProperty(PropertyName = "custom_fields_values")]
    public List<CustomFieldsValues> CustomFieldsValues { get; set; }
}

然后,当然,您还必须相应地更新任何填充此对象的代码:

CustomField custom = new CustomField() { 
    CustomerId = customerId, 
    CustomFieldsValues = new List<CustomFieldsValues> { 
        new CustomFieldsValues() {
           CustomFieldId = _portaClient._CustomFieldId, 
           DbValue = customFieldId 
        } 
    }
};

最后,如果他们真的想要 single-quotes 作为字段名称,他们会很胆大妄为地告诉你你的 JSON 格式错误,而实际上这是他们自己的系统使用格式错误和 non-standard JSON.