我正在尝试在Visual Studio 2011上为Windows 8构建Metro应用程序。当我尝试这样做的时候,我遇到了一些关于如何在没有JSON.NET
库的情况下解析JSON
的问题(它还不支持metro应用程序)。
不管怎样,我想解析一下:
{
"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"
}
发布于 2012-03-06 04:03:19
您可以使用在.NET 4.5中添加的System.Json Namespace中的类。您需要添加对System.Runtime.Serialization程序集的引用
JsonValue.Parse() Method解析JSON文本并返回一个JsonValue
JsonValue value = JsonValue.Parse(@"{ ""name"":""Prince Charming"", ...");
如果使用JSON对象传递字符串,则应该能够将值转换为JsonObject
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中的类非常相似。
发布于 2012-03-06 04:04:36
我使用this...but从来没有做过任何metro应用程序开发,所以我不知道对你可用的库有什么限制。(请注意,您需要将类标记为具有DataContract和DataMember属性)
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;
}
}
}
所以,如果你有这样的课程...
[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; }
}
然后你会这样使用它..。
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);
发布于 2015-02-28 05:06:37
对于那些没有4.5版本的人,这里是我的库函数,它可以读取json。它需要一个对System.Web.Extensions
的项目引用。
using System.Web.Script.Serialization;
public object DeserializeJson<T>(string Json)
{
JavaScriptSerializer JavaScriptSerializer = new JavaScriptSerializer();
return JavaScriptSerializer.Deserialize<T>(Json);
}
通常,json是根据合同写出来的。该契约可以并且通常将被编入一个类(T
)中。有时,您可以从json中提取一个单词,然后在对象浏览器中搜索该类型。
示例用法:
给定json
{"logEntries":[],"value":"My Code","text":"My Text","enabled":true,"checkedIndices":[],"checkedItemsTextOverflows":false}
您可以将其解析为RadComboBoxClientState
对象,如下所示:
string ClientStateJson = Page.Request.Form("ReportGrid1_cboReportType_ClientState");
RadComboBoxClientState RadComboBoxClientState = DeserializeJson<RadComboBoxClientState>(ClientStateJson);
return RadComboBoxClientState.Value;
https://stackoverflow.com/questions/9573119
复制相似问题