首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >没有JSON.NET库怎么解析JSON?

没有JSON.NET库怎么解析JSON?
EN

Stack Overflow用户
提问于 2012-03-06 03:59:59
回答 8查看 147.7K关注 0票数 81

我正在尝试在Visual Studio 2011上为Windows 8构建Metro应用程序。当我尝试这样做的时候,我遇到了一些关于如何在没有JSON.NET库的情况下解析JSON的问题(它还不支持metro应用程序)。

不管怎样,我想解析一下:

代码语言:javascript
复制
{
   "name":"Prince Charming",
   "artist":"Metallica",
   "genre":"Rock and Metal",
   "album":"Reload",
   "album_image":"http:\/\/up203.siz.co.il\/up2\/u2zzzw4mjayz.png",
   "link":"http:\/\/f2h.co.il\/7779182246886"
}
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-03-06 04:03:19

您可以使用在.NET 4.5中添加的System.Json Namespace中的类。您需要添加对System.Runtime.Serialization程序集的引用

JsonValue.Parse() Method解析JSON文本并返回一个JsonValue

代码语言:javascript
复制
JsonValue value = JsonValue.Parse(@"{ ""name"":""Prince Charming"", ...");

如果使用JSON对象传递字符串,则应该能够将值转换为JsonObject

代码语言:javascript
复制
using System.Json;


JsonObject result = value as JsonObject;

Console.WriteLine("Name .... {0}", (string)result["name"]);
Console.WriteLine("Artist .. {0}", (string)result["artist"]);
Console.WriteLine("Genre ... {0}", (string)result["genre"]);
Console.WriteLine("Album ... {0}", (string)result["album"]);

这些类与System.Xml.Linq Namespace中的类非常相似。

票数 97
EN

Stack Overflow用户

发布于 2012-03-06 04:04:36

我使用this...but从来没有做过任何metro应用程序开发,所以我不知道对你可用的库有什么限制。(请注意,您需要将类标记为具有DataContract和DataMember属性)

代码语言:javascript
复制
public static class JSONSerializer<TType> where TType : class
{
    /// <summary>
    /// Serializes an object to JSON
    /// </summary>
    public static string Serialize(TType instance)
    {
        var serializer = new DataContractJsonSerializer(typeof(TType));
        using (var stream = new MemoryStream())
        {
            serializer.WriteObject(stream, instance);
            return Encoding.Default.GetString(stream.ToArray());
        }
    }

    /// <summary>
    /// DeSerializes an object from JSON
    /// </summary>
    public static TType DeSerialize(string json)
    {
        using (var stream = new MemoryStream(Encoding.Default.GetBytes(json)))
        {
            var serializer = new DataContractJsonSerializer(typeof(TType));
            return serializer.ReadObject(stream) as TType;
        }
    }
}

所以,如果你有这样的课程...

代码语言:javascript
复制
[DataContract]
public class MusicInfo
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Artist { get; set; }

    [DataMember]
    public string Genre { get; set; }

    [DataMember]
    public string Album { get; set; }

    [DataMember]
    public string AlbumImage { get; set; }

    [DataMember]
    public string Link { get; set; }

}

然后你会这样使用它..。

代码语言:javascript
复制
var musicInfo = new MusicInfo
{
     Name = "Prince Charming",
     Artist = "Metallica",
     Genre = "Rock and Metal",
     Album = "Reload",
     AlbumImage = "http://up203.siz.co.il/up2/u2zzzw4mjayz.png",
     Link = "http://f2h.co.il/7779182246886"
};

// This will produce a JSON String
var serialized = JSONSerializer<MusicInfo>.Serialize(musicInfo);

// This will produce a copy of the instance you created earlier
var deserialized = JSONSerializer<MusicInfo>.DeSerialize(serialized);
票数 40
EN

Stack Overflow用户

发布于 2015-02-28 05:06:37

对于那些没有4.5版本的人,这里是我的库函数,它可以读取json。它需要一个对System.Web.Extensions的项目引用。

代码语言:javascript
复制
using System.Web.Script.Serialization;

public object DeserializeJson<T>(string Json)
{
    JavaScriptSerializer JavaScriptSerializer = new JavaScriptSerializer();
    return JavaScriptSerializer.Deserialize<T>(Json);
}

通常,json是根据合同写出来的。该契约可以并且通常将被编入一个类(T)中。有时,您可以从json中提取一个单词,然后在对象浏览器中搜索该类型。

示例用法:

给定json

代码语言:javascript
复制
{"logEntries":[],"value":"My Code","text":"My Text","enabled":true,"checkedIndices":[],"checkedItemsTextOverflows":false}

您可以将其解析为RadComboBoxClientState对象,如下所示:

代码语言:javascript
复制
string ClientStateJson = Page.Request.Form("ReportGrid1_cboReportType_ClientState");
RadComboBoxClientState RadComboBoxClientState = DeserializeJson<RadComboBoxClientState>(ClientStateJson);
return RadComboBoxClientState.Value;
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9573119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档