c#将字符串转换为字典

本文关键字:字典 转换 字符串 | 更新日期: 2023-09-27 18:12:39

我从Bitly api得到这个响应字符串:

{ "status_code": 200,
  "status_txt": "OK",
  "data":
    { "long_url": "http:'/'/amazon.de'/",
      "url": "http:'/'/amzn.to'/1mP2o58",
      "hash": "1mP2o58",
      "global_hash": "OjQAE",
      "new_hash": 0
    }
}

如何将此字符串转换为字典以及如何访问键"url"的值(不包含所有')

c#将字符串转换为字典

这不是一个普通的字符串。这是JSON格式的数据结构,这是一种常见且完善的格式,最初用于Javascript,但现在作为服务和客户端之间的数据传输机制相当常见。

与其自己重新发明轮子和解析JSON,我建议您使用现有的c# JSON库,比如JSON。.NET,它将吃掉该字符串并将其解析为。NET对象。

下面是一个代码示例,取自JSON。. NET的文档,显示其用法:

string json = @"{
'href': '/account/login.aspx',
'target': '_blank'
 }";
Dictionary<string, string> htmlAttributes =                 
 JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
Console.WriteLine(htmlAttributes["href"]);
   // /account/login.aspx
Console.WriteLine(htmlAttributes["target"]);
   // _blank

如果您将Newtonsoft的Json包添加到您的项目中,您可以将Json反序列化为匿名类型。然后你可以从中获取url。这可以通过Visual Studio中的NuGet获得,并提供对异步或同步序列化/反序列化的支持。

public string GetUrl(string bitlyResponse)
{
    var responseObject = new
    {
        data = new { url = string.Empty },
    };
    responseObject = JsonConvert.DeserializeAnonymousType(bitlyResponse, responseObject);
    return responseObject.data.url;
}

我会使用JSON.NET。

http://james.newtonking.com/json

MIT许可证,这意味着如果你做任何商业的东西,你是好的。

我认为你不会想直接去查字典,因为那里有一些东西不是一对一的关系。因此,您可以像下面这样创建一个类:

public class BitlyData
{
    public string LongUrl{ get; set; }
    public string Url { get; set; }
    public string Hash { get; set; }
    public string GlobalHash { get; set; }
    public string NewHash { get; set; }
}

你可以使用Json。. NET将该String转换为jobobject。我们会把你的字符串命名为bitlyString。

JObject bitlyObject = JObject.Parse(bitlyString);

现在我们所要做的就是访问数据了

BitlyData theData = JsonConvert.DeserializeObject<BitlyData>(bitlyObject["data"]);

然后你可以使用getter来访问url(和任何其他部分)。

当然,你可以做得更好,如果有一个类来处理其他位,这样你就只需要做一次序列化。

1)将这些类添加到您的项目

public class Rootobject
{
    public int status_code { get; set; }
    public string status_txt { get; set; }
    public Data data { get; set; }
}
public class Data
{
    public string long_url { get; set; }
    public string url { get; set; }
    public string hash { get; set; }
    public string global_hash { get; set; }
    public int new_hash { get; set; }
}

2)添加对JSON的引用。净

3)

   string jsonString= "YOUR JSON STRING";
   Rootobject weps = JsonConvert.DeserializeObject<Rootobject>(jsonString);
   Console.WriteLine(weps.status_code);
   if (weps.data != null)
   {
        Console.WriteLine(weps.data.url);
        Console.WriteLine(weps.data.global_hash);
        //...
   }