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.
我正在尝试 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.