使用Newtonsoft.Json这是一个开源的Json.Net库。
下载地址:。当前版本为 Release 8
从下载到的源代码中获取Newtonsoft.Json.Net20.dll,添加到自己的工程中。
using Newtonsoft.Json;
定义类:
public class Message
{ public string Address { get; set; } [JsonProperty(TypeNameHandling = TypeNameHandling.All)] public object Body { get; set; } } public class SearchDetails { public string Query { get; set; } public string Language { get; set; } }测试:
Message message = new Message
{ Address = "", Body = new SearchDetails { Query = "Json.Net", Language = "en-us" } }; string jsonMsg = JsonConvert.SerializeObject(message, Formatting.Indented);//Indented表示以缩进形式显示结果 System.Diagnostics.Debug.Write(jsonMsg); Message deserialized = JsonConvert.DeserializeObject<Message>(jsonMsg); SearchDetails searchDetails = (SearchDetails)deserialized.Body; Response.Write(searchDetails.Query + "," + searchDetails.Language + "<br/>");Debug输出结果格式:
{
"Address": "", "Body": { "$type": "TestJsonSerialization.SearchDetails, TestJsonSerialization", "Query": "Json.Net", "Language": "en-us" }}注:1.JsonProperty标记字段或属性,用来控制它作为一个Json对象的属性序列化。
2.TypeNameHandling 用来为Json序列化指定类型名。它有几个枚举值:
Member | Description |
---|---|
None | Do not include the .NET type name when serializing types. |
Objects | Include the .NET type name when serializing into a JSON object structure. |
Arrays | Include the .NET type name when serializing into a JSON array structure. |
Auto | Include the .NET type name when the type of the object being serialized is not the same as its declared type. |
All | Always include the .NET type name when serializing. |