如何使用 c# 读取 asp.net 中的 json 响应(经销商俱乐部域检查可用性 API 集成)
Posted
技术标签:
【中文标题】如何使用 c# 读取 asp.net 中的 json 响应(经销商俱乐部域检查可用性 API 集成)【英文标题】:how to read json response in asp.net with c# (Reseller Club Domain Check Availability API Integration) 【发布时间】:2016-05-20 12:00:07 【问题描述】:我正在使用this API,从这个 API 我得到以下输出。
"apple.com":"status":"regthroughothers","classkey":"dotin","microsoft.com":"status":"regthroughothers","classkey":"dotin","asdfghq.in":"status":"available","classkey":"dotin"
注意:这里的输出取决于客户的输入。
现在你能建议我如何获得表格格式的输出,如
【问题讨论】:
“表格格式”是什么意思?呈现对象列表(中继器?MVC 助手?DataGrid?)与该列表的生成方式(解析 Json 字符串)无关。如何呈现数据很重要。例如,您可以直接绑定到 MVC 中的解析数据。 【参考方案1】:试试这个我例如转换为DataTable
。
private string jsonObject = JSON_String.Replace("", "[").Replace("", "]");
public JsonExample()
JArray jArray = JArray.Parse(jsonObject);
DataTable dt = new DataTable();
dt.Columns.Add("St.No");
dt.Columns.Add("DomainName");
dt.Columns.Add("status");
dt.Columns.Add("classkey");
foreach (JProperty item in jArray[0])
var stNo= 0;
var jArray2 = JArray.Parse(item.Value.ToString());
foreach (var item2 in jArray2)
dt.Rows.Add(++stNo, item.Name, item2["status"], item2["classkey"]);
Console.WriteLine($" St. No: stNo DomainName: item.Name Status: item2["status"] classkey item2["classkey"] ");
【讨论】:
【参考方案2】:您可以使用 JSON.NET (http://www.newtonsoft.com/json)。如果您从未使用过 JSON.NET,可以查看链接中的代码示例以感受一下:http://www.newtonsoft.com/json/help/html/SerializeObject.htm。
考虑到 JSON.NET 中的功能,以下代码可能不是最优雅的方式,但它可以完成您的工作。
private class DomainProp
public string status;
public string classkey;
假设你有上面的课程:
string sJSON =@"'apple.com':'status':'regthroughothers','classkey':'dotin',
'microsoft.com':'status':'regthroughothers','classkey':'dotin',
'asdfghq.in':'status':'available','classkey':'dotin'";
Dictionary<string, DomainProp> dicDomainProp = JsonConvert.DeserializeObject<Dictionary<string, DomainProp>>(sJSON);
// get into table format
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] new DataColumn("S.No."),
new DataColumn("Domain Name"),
new DataColumn("Status"),
new DataColumn("Classkey") );
int i = 0;
foreach (KeyValuePair<string, DomainProp> pair in dicDomainProp)
dt.Rows.Add(++i, pair.Key, pair.Value.status, pair.Value.classkey);
【讨论】:
解析值时遇到意外字符:@。路径'',第 0 行,第 0 位置。 无法从 System.String 转换或转换为 _Default+DomainProp。【参考方案3】:使用Json.NET 可以轻松解析数据:
var input = " \"apple.com\": \"status\":\"regthroughothers\",\"classkey\":\"dotin\",\"microsoft.com\": \"status\":\"regthroughothers\",\"classkey\":\"dotin\",\"asdfghq.in\": \"status\":\"available\",\"classkey\":\"dotin\" ";
dynamic data = Newtonsoft.Json.Linq.JObject.Parse(input);
这将返回一个对象列表,其Name
属性为域名,其Value
属性包含status
和classkey
属性包含各自字段的内容。
通过将结果声明为dynamic
,我们可以使用字典键,就好像它们是对象的属性一样。
将其呈现为表格取决于您使用的框架。例如,使用 ASP.NET MVC 执行此操作的一种简单方法是:
<table class="table">
<thead>
<tr>
<th>S.No.</th>
<th>Domain Name</th>
<th>Status</th>
<th>Class Key</th>
</tr>
</thead>
<tbody>
@
int i = 1;
foreach (var it in data)
<tr>
<td>@(i++)</td>
<td>@it.Name</td>
<td>@it.Value.status</td>
<td>@it.Value.classkey</td>
</tr>
</tbody>
</table>
结果是:
<table>
<thead>
<tr>
<th>S.No.</th>
<th>Domain Name</th>
<th>Status</th>
<th>Class Key</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>apple.com</td>
<td>regthroughothers</td>
<td>dotin</td>
</tr>
<tr>
<td>2</td>
<td>microsoft.com</td>
<td>regthroughothers</td>
<td>dotin</td>
</tr>
<tr>
<td>3</td>
<td>asdfghq.in</td>
<td>available</td>
<td>dotin</td>
</tr>
</tbody>
</table>
【讨论】:
【参考方案4】:1首先将你的json转换成对象形式
将您的 json 对象复制/删除到 json2sharp 并将 ModelObject 复制/删除到您的代码中
http://json2csharp.com/
2 将你的 json 反序列化为模型对象
ModelObject object = new javascriptSerializer().Deserialize<ModelObject >(result);
【讨论】:
抱歉,我无法理解您的回答。因为如果我按照第一步,它将为我创建课程,但我的输出每次都会不同。 @ImranLuhur 输入没有问题。JavaScriptSerializer
虽然已被弃用且 非常 旧。甚至 Web API 也使用 Json.NET
如果是动态的json结果,这个方案就不适合了。以上是关于如何使用 c# 读取 asp.net 中的 json 响应(经销商俱乐部域检查可用性 API 集成)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 和 ASP.NET MVC 中读取/写入 cookie
如何从 excel 中读取数据并推入 asp.net 中的数组?
ASP.NET MVC 4中如何读取web.config中的配置