繁体   English   中英

有时是,有时不是 JSON 错误:“没有为'System.String'类型定义无参数构造函数”

[英]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

.Net 小提琴

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM