[英]No parameterless constructor defined for type of 'System.String' during JSON deserialization
[英]Sometimes yes and sometimes not JSON error: “No parameterless constructor defined for type of 'System.String'”
这是我的代码:
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, string> responseVals = serializer.Deserialize<Dictionary<string, string>>(response);
当response
是
{
"status": 21007
}
有用。
当response
是
{
"receipt": {
"receipt_type": "ProductionSandbox",
"adam_id": 0,
"app_item_id": 0,
"bundle_id": "...",
"application_version": "1.0",
"download_id": 0,
"version_external_identifier": 0,
"receipt_creation_date": "...",
"receipt_creation_date_ms": "...",
"receipt_creation_date_pst": "...",
"request_date": "...",
"request_date_ms": "...",
"request_date_pst": "...",
"original_purchase_date": "...",
"original_purchase_date_ms": "...",
"original_purchase_date_pst": "...",
"original_application_version": "1.0",
"in_app": [
{
"quantity": "1",
"product_id": "...",
"transaction_id": "...",
"original_transaction_id": "...",
"purchase_date": "...",
"purchase_date_ms": "...",
"purchase_date_pst": "...",
"original_purchase_date": "...",
"original_purchase_date_ms": "..",
"original_purchase_date_pst": "...",
"is_trial_period": "false"
}
]
},
"status": 0,
"environment": "Sandbox"
}
我收到一个错误:
没有为“System.String”类型定义无参数构造函数
为什么有区别?
这是在 web 服务 (Asp.net) 中验证应用程序购买中的 iOS(在沙盒中)。 也许这很重要。
为什么有区别?
您的第一个示例正在工作,因为您将原始数据传递给反序列化为
Dictionary<string, string>
,但在第二个示例中,您尝试将自定义 object 即receipt
转换为不可行的字符串
如果要反序列化特定属性,则可以将此 json 字符串转换为JObject
,然后使用该属性获取值
string json = @"{
status: '20122',
OS: [
'Windows',
'macintosh'
]
}";
JObject obj = JObject.Parse(json);
Console.WriteLine(obj["status"]); //20122
Json 解码器的主要优点之一是它们通常忽略 json 中存在的任何字段,但反序列化的 class 中不存在。
如果您只想要状态并忽略所有 rest,您可以这样做:
public class Data
{
public string Status {get;set;}
}
public void A()
{
Data data = Newtonsoft.Json.JsonConvert.DeserializeObject<Response>(response);
}
第二个响应不会反序列化成字典,你可以尝试反序列化成 object。
object objClass = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(response);
或创建您自己的 object 并反序列化为它。
您可以使用从 Json 到 classes ,它将根据您的 json 结构生成类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.