如何转换 JSON 字符串以便在 C# 中更好地使用
How do I convert a JSON String for better use in C#
我在这里 (http://api.steampowered.com/ISteamApps/GetAppList/v0001/ or http://api.steampowered.com/ISteamApps/GetAppList/v2/) 得到了这个列表,其中包含 App-ID 和关联的名称。
我不知道如何将这些字符串转换为数组或其他东西。我想创建一个函数,其中 returns 给定 App-ID 的名称。
我什么都试过了..我该如何正确转换它们?
如果我没有正确理解你的问题,这里是 tutorial 来解析对象中的 JSON 字符串。有一些代码要复制;此代码创建一个 class 你可以达到目标。
如果不是您需要的,请说明您的需求。
当您反序列化来自链接的 JSON 数据时,您可以创建一些 C# classes 来为您服务。考虑以下代码:
public class App
{
public int appid { get; set; }
public string name { get; set; }
}
public class Applist
{
public List<App> apps { get; set; }
}
public class RootObject
{
public Applist applist { get; set; }
}
现在您有一些 c# classes 可以将您的 JSON 映射到,您只需要将传入的 JSON 数据反序列化到 RootObject
class,然后您将获得您的列表,以便您可以使用您的 C# 技能查询它。
如何在 C# 中反序列化 JSON 的示例
// Assuming that result is the incoming JSON object
RootObject steamRootObject =
new JavaScriptSerializer().Deserialize<RootObject>(result);
// now you have your data inside steamRootObject,
// loop over the data and extract whatever fields you want.
foreach(var app in steamRootObject.Applist.apps)
{
// your logic goes here
}
注意:我使用此网站创建了 classes:http://json2csharp.com/
首先,您需要一个库来自动将您的 json 翻译成对象。我向您推荐 Json.NET (Newtonsoft),这是我认为最好的库之一。
使用 Nuget 安装后,您需要构建模型来表示这个 JSON,如果您懒得自己制作,建议您查看网站 http://json2csharp.com/,你输入 JSON 或 URL,他们会为你生成模型。
之后,对于一个简单的方法,需要进行一些更改,首先用 [DataContract] 注释您请求中涉及的每个 class,用 [DataMember(Name = [=22) 注释每个 属性 =])] 帮助 Json.NET 找到您的 JSON 属性。这样,您将帮助库 serializa/deserialize 为您提供数据,并且您将可以轻松、快速且可靠地将 JSON 字符串转换为您的对象。使用 DataMember 注释,您无需限制自己使用从 json 属性 到 class.
的相同名称
只是为了帮助你,一个使用 class 应用程序的小例子
[DataContract]
public class App
{
[DataMember(Name = "appid")]
public int Appid { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
}
PS:要使用DataContract和DataMember,需要添加对System.Runtime.Serialization
的引用
尝试以下 link:
Fiddle 用于 json 解析
我在这里 (http://api.steampowered.com/ISteamApps/GetAppList/v0001/ or http://api.steampowered.com/ISteamApps/GetAppList/v2/) 得到了这个列表,其中包含 App-ID 和关联的名称。 我不知道如何将这些字符串转换为数组或其他东西。我想创建一个函数,其中 returns 给定 App-ID 的名称。
我什么都试过了..我该如何正确转换它们?
如果我没有正确理解你的问题,这里是 tutorial 来解析对象中的 JSON 字符串。有一些代码要复制;此代码创建一个 class 你可以达到目标。
如果不是您需要的,请说明您的需求。
当您反序列化来自链接的 JSON 数据时,您可以创建一些 C# classes 来为您服务。考虑以下代码:
public class App
{
public int appid { get; set; }
public string name { get; set; }
}
public class Applist
{
public List<App> apps { get; set; }
}
public class RootObject
{
public Applist applist { get; set; }
}
现在您有一些 c# classes 可以将您的 JSON 映射到,您只需要将传入的 JSON 数据反序列化到 RootObject
class,然后您将获得您的列表,以便您可以使用您的 C# 技能查询它。
如何在 C# 中反序列化 JSON 的示例
// Assuming that result is the incoming JSON object
RootObject steamRootObject =
new JavaScriptSerializer().Deserialize<RootObject>(result);
// now you have your data inside steamRootObject,
// loop over the data and extract whatever fields you want.
foreach(var app in steamRootObject.Applist.apps)
{
// your logic goes here
}
注意:我使用此网站创建了 classes:http://json2csharp.com/
首先,您需要一个库来自动将您的 json 翻译成对象。我向您推荐 Json.NET (Newtonsoft),这是我认为最好的库之一。
使用 Nuget 安装后,您需要构建模型来表示这个 JSON,如果您懒得自己制作,建议您查看网站 http://json2csharp.com/,你输入 JSON 或 URL,他们会为你生成模型。
之后,对于一个简单的方法,需要进行一些更改,首先用 [DataContract] 注释您请求中涉及的每个 class,用 [DataMember(Name = [=22) 注释每个 属性 =])] 帮助 Json.NET 找到您的 JSON 属性。这样,您将帮助库 serializa/deserialize 为您提供数据,并且您将可以轻松、快速且可靠地将 JSON 字符串转换为您的对象。使用 DataMember 注释,您无需限制自己使用从 json 属性 到 class.
的相同名称只是为了帮助你,一个使用 class 应用程序的小例子
[DataContract]
public class App
{
[DataMember(Name = "appid")]
public int Appid { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
}
PS:要使用DataContract和DataMember,需要添加对System.Runtime.Serialization
的引用尝试以下 link:
Fiddle 用于 json 解析