- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在发出一个返回 JSON 的 HTTP 请求,但取决于请求是否成功,返回的字段会有所不同。
考虑以下片段:
WebResponse response = moveItemRequest.GetResponse();
string stringResponse = string.Empty;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
stringResponse = reader.ReadToEnd();
}
// deserialize json response
MoveItemResponse moveItemResponse = JsonConvert.DeserializeObject<MoveItemResponse>(stringResponse);
MoveItemResponse
类:
public class MoveItemResponse
{
public string code;
public string reason;
public IList<ItemInfo> ItemInfo;
public MoveItemResponse()
{
ItemInfo = new List<ItemInfo>();
}
}
如何检查是否返回了特定字段?根据请求是否成功,将返回代码和原因,否则将返回 itemInfo(其中 itemInfo 是一个对象)。
失败响应:
{
"reason":"unlucky",
"message":null,
"code":460
}
成功响应:
{
"errorState":null,
"credits":6310,
"itemInfo":[
{
"tradeId":717011415,
"itemData":{
"id":101619602325,
"timestamp":1447170628,
"formation":"f3412",
"untradeable":false,
"assetId":158023,
"rating":94,
"itemType":"player",
"resourceId":-2147325625,
"owners":1,
"discardValue":752,
"itemState":"forSale",
"cardsubtypeid":3,
"lastSalePrice":0,
"morale":50,
"fitness":99,
"injuryType":"none",
"injuryGames":0,
"preferredPosition":"RW",
"statsList":[
{
"value":0,
"index":0
},
{
"value":0,
"index":1
},
{
"value":0,
"index":2
},
{
"value":0,
"index":3
},
{
"value":0,
"index":4
}
],
"lifetimeStats":[
{
"value":0,
"index":0
},
{
"value":0,
"index":1
},
{
"value":0,
"index":2
},
{
"value":0,
"index":3
},
{
"value":0,
"index":4
}
],
"training":0,
"contract":7,
"suspension":0,
"attributeList":[
{
"value":92,
"index":0
},
{
"value":88,
"index":1
},
{
"value":86,
"index":2
},
{
"value":95,
"index":3
},
{
"value":24,
"index":4
},
{
"value":62,
"index":5
}
],
"teamid":241,
"rareflag":1,
"playStyle":250,
"leagueId":53,
"assists":0,
"lifetimeAssists":0,
"loyaltyBonus":1,
"pile":5,
"nation":52
},
"tradeState":"active",
"buyNowPrice":1726000,
"currentBid":0,
"offers":0,
"watched":null,
"bidState":"none",
"startingBid":426000,
"confidenceValue":100,
"expires":3212,
"sellerName":"FIFA UT",
"sellerEstablished":0,
"sellerId":0,
"tradeOwner":false
}
],
"duplicateItemIdList":null,
"bidTokens":{
},
"currencies":[
{
"name":"COINS",
"funds":6310,
"finalFunds":6310
},
{
"name":"POINTS",
"funds":0,
"finalFunds":0
},
{
"name":"DRAFT_TOKEN",
"funds":0,
"finalFunds":0
}
]
}
其次,是否需要做 StreamReader 在反序列化之前将返回的 JSON 声明为字符串?
最佳答案
我认为有几种方法可以解决这个问题,例如:
IndexOf
并确定该属性是否存在? 例如:
if (response.IndexOf("\"code\":", StringComparison.CurrentCultureIgnoreCase) > 0) /*assumption properties are inside double quotes*/
{
//Do things for error
}
else
{
//Do things for success
}
例如:
var instance = JsonConvert.DeserializeObject<RootObject>(response);
if (instance.code != 0)
{
//Do things for error
}
else
{
//Do things for success
}
我已尝试使用以下代码执行第二个选项,因此请尝试使用此代码。我使用 json2csharp 根据您的示例数据创建了模拟类.我希望我已经理解了你的问题。
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
var responses = new string[] { @"{""reason"":""unlucky"",""message"":null,""code"":460}",
@"{""errorState"":null,""credits"":6310,""itemInfo"":[{""tradeId"":717011415,""itemData"":{""id"":101619602325
,""timestamp"":1447170628,""formation"":""f3412"",""untradeable"":false,""assetId"":158023,""rating"":94,""itemType""
:""player"",""resourceId"":-2147325625,""owners"":1,""discardValue"":752,""itemState"":""forSale"",""cardsubtypeid""
:3,""lastSalePrice"":0,""morale"":50,""fitness"":99,""injuryType"":""none"",""injuryGames"":0,""preferredPosition""
:""RW"",""statsList"":[{""value"":0,""index"":0},{""value"":0,""index"":1},{""value"":0,""index"":2},{""value"":0,""index""
:3},{""value"":0,""index"":4}],""lifetimeStats"":[{""value"":0,""index"":0},{""value"":0,""index"":1},{""value"":0,""index""
:2},{""value"":0,""index"":3},{""value"":0,""index"":4}],""training"":0,""contract"":7,""suspension"":0,""attributeList""
:[{""value"":92,""index"":0},{""value"":88,""index"":1},{""value"":86,""index"":2},{""value"":95,""index"":3},{""value""
:24,""index"":4},{""value"":62,""index"":5}],""teamid"":241,""rareflag"":1,""playStyle"":250,""leagueId"":53,""assists""
:0,""lifetimeAssists"":0,""loyaltyBonus"":1,""pile"":5,""nation"":52},""tradeState"":""active"",""buyNowPrice"":1726000
,""currentBid"":0,""offers"":0,""watched"":null,""bidState"":""none"",""startingBid"":426000,""confidenceValue"":100
,""expires"":3212,""sellerName"":""FIFA UT"",""sellerEstablished"":0,""sellerId"":0,""tradeOwner"":false}],""duplicateItemIdList""
:null,""bidTokens"":{},""currencies"":[{""name"":""COINS"",""funds"":6310,""finalFunds"":6310},{""name"":""POINTS""
,""funds"":0,""finalFunds"":0},{""name"":""DRAFT_TOKEN"",""funds"":0,""finalFunds"":0}]}" };
foreach (var response in responses)
{
var instance = JsonConvert.DeserializeObject<RootObject>(response);
if (instance.code != 0)
{
//Do things for error
}
else
{
//Do things for success
}
}
}
}
public class StatsList
{
public int value { get; set; }
public int index { get; set; }
}
public class LifetimeStat
{
public int value { get; set; }
public int index { get; set; }
}
public class AttributeList
{
public int value { get; set; }
public int index { get; set; }
}
public class ItemData
{
public long id { get; set; }
public int timestamp { get; set; }
public string formation { get; set; }
public bool untradeable { get; set; }
public int assetId { get; set; }
public int rating { get; set; }
public string itemType { get; set; }
public int resourceId { get; set; }
public int owners { get; set; }
public int discardValue { get; set; }
public string itemState { get; set; }
public int cardsubtypeid { get; set; }
public int lastSalePrice { get; set; }
public int morale { get; set; }
public int fitness { get; set; }
public string injuryType { get; set; }
public int injuryGames { get; set; }
public string preferredPosition { get; set; }
public List<StatsList> statsList { get; set; }
public List<LifetimeStat> lifetimeStats { get; set; }
public int training { get; set; }
public int contract { get; set; }
public int suspension { get; set; }
public List<AttributeList> attributeList { get; set; }
public int teamid { get; set; }
public int rareflag { get; set; }
public int playStyle { get; set; }
public int leagueId { get; set; }
public int assists { get; set; }
public int lifetimeAssists { get; set; }
public int loyaltyBonus { get; set; }
public int pile { get; set; }
public int nation { get; set; }
}
public class ItemInfo
{
public int tradeId { get; set; }
public ItemData itemData { get; set; }
public string tradeState { get; set; }
public int buyNowPrice { get; set; }
public int currentBid { get; set; }
public int offers { get; set; }
public object watched { get; set; }
public string bidState { get; set; }
public int startingBid { get; set; }
public int confidenceValue { get; set; }
public int expires { get; set; }
public string sellerName { get; set; }
public int sellerEstablished { get; set; }
public int sellerId { get; set; }
public bool tradeOwner { get; set; }
}
public class BidTokens
{
}
public class Currency
{
public string name { get; set; }
public int funds { get; set; }
public int finalFunds { get; set; }
}
public class RootObject
{
public string reason { get; set; }
public object message { get; set; }
public int code { get; set; }
public object errorState { get; set; }
public int credits { get; set; }
public List<ItemInfo> itemInfo { get; set; }
public object duplicateItemIdList { get; set; }
public BidTokens bidTokens { get; set; }
public List<Currency> currencies { get; set; }
public override string ToString()
{
return $"Contains Error: {code != 0}";
}
}
}
关于C# 检查 JSON 响应是否包含 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633812/
查看“mysqldump -d”并看到一个键是 KEY,而不是“PRIMARY KEY”或“FOREIGN KEY” 什么是关键? 示例: CREATE TABLE IF NOT EXISTS `TA
在我开始使用 Python 的过程中尝试找出最佳编码实践。我用 Pandas 写了一个 csv 到数据框阅读器。它使用格式: dataframe = read_csv(csv_input, useco
在 Flutter 中,用一个例子可以清楚地解释什么? 我的困惑是关于 key,如下面的代码所示。 MyHomepage({Key key, this.title}) : super(key: key
我在我的 Android 应用程序中使用 GCM。要使用 GCM 服务,我们需要创建 Google API key 。因此,我为 android、服务器和浏览器 key 创建了 API key 。似乎
我想在 azure key 保管库中创建一个 secret ,该 key 将具有多个 key (例如 JSON)。 例如- { "storageAccountKey":"XXXXX", "Co
尝试通过带有 encodeforURL() 的 url 发送 key 时,我不断收到错误消息和 decodefromUrl() .代码示例如下。 这是我的入口页面: key = generateSec
是否有检查雪花变体字段中是否存在键的函数? 最佳答案 您可以使用 IS_NULL_VALUE 来查看 key 是否存在。如果键不存在,则结果将为 NULL。如果键存在,如果值为 JSON null,则
我正在尝试运行此命令: sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A 但我收到一个错误: Execu
我有一个 csv 文件,我正在尝试对 row[3] 进行计数,然后将其与 row[0] 连接 row[0] row[3] 'A01' 'a' 'B02'
如何编写具有这种形式的函数: A(key, B(key, C(key, ValFactory(key)))) 其中 A、B 和 C 具有此签名: TResult GetOrAdd(string key
审查 this method我很好奇为什么它使用 Object.keys(this).map(key => (this as any)[key])? 只调用 Object.keys(this).ind
我有一个奇怪的情况。我有一个字典,self.containing_dict。使用调试器,我看到了字典的内容,并且可以看到 self 是其中的一个键。但是看看这个: >>> self in self.c
我需要在我的 Google Apps 脚本中使用 RSA-SHA256 和公钥签署消息。 我正在尝试使用 Utilities.computeRsaSha256Signature(value, key)
我是 React 的初学者开发人员,几天前我看到了一些我不理解的有趣语法。 View组件上有{...{key}},我会写成 key={key} ,它完全一样吗?你有链接或解释吗? render()
代理 key 、合成 key 和人工 key 之间有什么区别吗? 我不清楚确切的区别。 最佳答案 代理键、合成键和人工键是同义词。技术关键是另一个。它们都表示“没有商业意义的主键”。它们不同于具有超出
问题陈述:在 Web/控制台 C# 应用程序中以编程方式检索并使用存储在 Azure Key Vault 中的敏感值(例如数据库连接字符串)。 据我所知,您可以在 AAD 中注册应用,并使用其客户端
问题陈述:在 Web/控制台 C# 应用程序中以编程方式检索并使用存储在 Azure Key Vault 中的敏感值(例如数据库连接字符串)。 据我所知,您可以在 AAD 中注册应用,并使用其客户端
我正在寻找 Perl 警告的解决方案 “引用键是实验性的” 我从这样的代码中得到这个: foreach my $f (keys($normal{$nuc}{$e})) {#x, y, and z 我在
我正在为 HSM 实现 JCE 提供程序 JCE中有没有机制指定 key 生成类型例如: session key 或永久 key KeyGenerator keygen = KeyGener
我在 Facebook 上创建了一个应用程序。我已经正确添加了 keyhash 并且应用程序运行良好但是当我今天来并尝试再次运行它时它给了我这个错误。 这已经是第二次了。 Previsouly 当我收
我是一名优秀的程序员,十分优秀!