如何使用 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 属性包含statusclasskey 属性包含各自字段的内容。

通过将结果声明为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中的配置

Asp.net读取Word

如何从 ASP.net C# 中的字符串中提取 C#/PHP/Code/SQL

如何从asp.net中的js函数调用c#函数?