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"
的值(不包含所有'
)
这不是一个普通的字符串。这是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/jsonMIT许可证,这意味着如果你做任何商业的东西,你是好的。
我认为你不会想直接去查字典,因为那里有一些东西不是一对一的关系。因此,您可以像下面这样创建一个类:
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);
//...
}