C# 有时是,有时不是JSON错误:“是”;没有为';类型定义无参数构造函数;System.String'&引用;
这是我的密码:C# 有时是,有时不是JSON错误:“是”;没有为';类型定义无参数构造函数;System.String'&引用;,c#,ios,asp.net,.net,json,C#,Ios,Asp.net,.net,Json,这是我的密码: JavaScriptSerializer serializer = new JavaScriptSerializer(); Dictionary<string, string> responseVals = serializer.Deserialize<Dictionary<string, string>>(response); 它起作用了 当响应为 { "status": 21007 } { "receipt": { "r
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, string> responseVals = serializer.Deserialize<Dictionary<string, string>>(response);
它起作用了
当响应
为
{
"status": 21007
}
{
"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应用程序内购买(在沙箱中)。也许这很重要。为什么不同
第一个示例之所以有效,是因为您正在传递基本数据
反序列化为字典
,但在第二个示例中,您尝试转换自定义
对象,即收据
到不可接受的字符串
如果要反序列化特定属性,则可以将此json字符串转换为
JObject
,然后使用该属性获取值
string json = @"{
status: '20122',
OS: [
'Windows',
'macintosh'
]
}";
JObject obj = JObject.Parse(json);
Console.WriteLine(obj["status"]); //20122
第二个响应将不会反序列化到字典中,您可以尝试将其序列化为object
object objClass = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(response);
objectobjclass=Newtonsoft.Json.JsonConvert.DeserializeObject(响应);
或者创建自己的对象并对其进行反序列化
您可以使用,它将根据您的json结构生成类。json解码器的一个主要优点是,它们通常忽略json中存在的任何字段,但不忽略反序列化类中的字段 如果您只想查看状态,而忽略所有其他内容,则可以执行以下操作:
public class Data
{
public string Status {get;set;}
}
public void A()
{
Data data = Newtonsoft.Json.JsonConvert.DeserializeObject<Response>(response);
}
公共类数据
{
公共字符串状态{get;set;}
}
公共图书馆A()
{
Data Data=Newtonsoft.Json.JsonConvert.DeserializeObject(响应);
}
第二个响应看起来不像是反序列化到字典中。它不能将整个对象放入字符串中吗?@Neil我知道。但是如果我不需要完全反序列化它呢。我只需要另一个值。编写自己的jsonvert
类来处理它。或者不反序列化json,手动解释字符串。或者编写json类来处理实际数据(非常简单,内置于VS2019编辑/粘贴特殊/粘贴为json类)。@ispiro,根据您的最后一条评论,要从完整的json字符串中获取特定值,您可以将其转换为JObject
,然后访问该值