C# 解析json对象
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10432647/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Parsing json objects
提问by Gregor Menih
I'm having trouble understanding how to parse JSON string into c# objects with Visual .NET. The task is very easy, but I'm still lost... I get this string:
我无法理解如何使用 Visual .NET 将 JSON 字符串解析为 c# 对象。任务很简单,但我还是迷路了……我得到了这个字符串:
{"single_token":"842269070","username":"example123","version":1.1}
And this is the code where I try to desterilize:
这是我尝试消毒的代码:
namespace _SampleProject
{
public partial class Downloader : Form
{
public Downloader(string url, bool showTags = false)
{
InitializeComponent();
WebClient client = new WebClient();
string jsonURL = "http://localhost/jev";
source = client.DownloadString(jsonURL);
richTextBox1.Text = source;
JavaScriptSerializer parser = new JavaScriptSerializer();
parser.Deserialize<???>(source);
}
I don't know what to put between the '<' and '>', and from what I've read online I have to create a new class for it..? Also, how do I get the output? An example would be helpful!
我不知道在 '<' 和 '>' 之间放什么,根据我在网上阅读的内容,我必须为它创建一个新类..?另外,我如何获得输出?一个例子会很有帮助!
采纳答案by jaryd
Create a new class that your JSON can be deserialized into such as:
创建一个可以将您的 JSON 反序列化为的新类,例如:
public class UserInfo
{
public string single_token { get; set; }
public string username { get; set; }
public string version { get; set; }
}
public partial class Downloader : Form
{
public Downloader(string url, bool showTags = false)
{
InitializeComponent();
WebClient client = new WebClient();
string jsonURL = "http://localhost/jev";
source = client.DownloadString(jsonURL);
richTextBox1.Text = source;
JavaScriptSerializer parser = new JavaScriptSerializer();
var info = parser.Deserialize<UserInfo>(source);
// use deserialized info object
}
}
回答by Jakub Konecki
Yes, you need a new class with properties that will match your JSON.
是的,您需要一个具有与您的 JSON 匹配的属性的新类。
MyNewClass result = parser.Deserialize<MyNewClass>(source);
回答by Eduardo Crimi
You need a Class that match with the JSON you are getting and it will return a new object of that class with the values populated.
您需要一个与您获得的 JSON 匹配的类,它将返回该类的一个新对象,其中填充了值。
回答by marko
If you're using .NET 4 - use the dynamic datatype.
如果您使用 .NET 4 - 使用动态数据类型。
http://msdn.microsoft.com/en-us/library/dd264736.aspx
http://msdn.microsoft.com/en-us/library/dd264736.aspx
string json = "{ single_token:'842269070', username: 'example123', version:1.1}";
JavaScriptSerializer jss = new JavaScriptSerializer();
dynamic obj = jss.Deserialize<dynamic>(json);
Response.Write(obj["single_token"]);
Response.Write(obj["username"]);
Response.Write(obj["version"]);
回答by svick
The usual way would be create a class (or a set of classes, for more complex JSON strings) that describes the object you want to deserialize and use that as the generic parameter.
通常的方法是创建一个类(或一组类,用于更复杂的 JSON 字符串)来描述要反序列化的对象并将其用作通用参数。
Another option is to deserialize the JSON into a Dictionary<string, object>:
另一种选择是将 JSON 反序列化为Dictionary<string, object>:
parser.Deserialize<Dictionary<string, object>>(source);
This way, you can access the data, but I wouldn't suggest you to do this unless you have to.
这样,您就可以访问数据,但除非万不得已,否则我不建议您这样做。
回答by RackM
Following is the code..
以下是代码..
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
request = WebRequest.Create("https://myipaddress/api/admin/configuration/v1/conference/1/");
request.Credentials = new NetworkCredential("admin", "admin123");
// Create POST data and convert it to a byte array.
request.Method = "GET";
// Set the ContentType property of the WebRequest.
request.ContentType = "application/json; charset=utf-8";
WebResponse response = request.GetResponse();
// Display the status.
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
JavaScriptSerializer js = new JavaScriptSerializer();
var obj = js.Deserialize<dynamic>(responseFromServer);
Label1.Text = obj["name"];
// Display the content.
Console.WriteLine(responseFromServer);
// Clean up the streams.
reader.Close();
dataStream.Close();
response.Close();
回答by LastTribunal
dynamic data = JObject.Parse(jsString);
var value= data["value"];

