WP8.1学习系列(第二十四章)——Json解析

本文介绍了如何使用.NET框架中的DataContractJsonSerializer类将类型实例序列化为JSON文档,并将JSON文档反序列化为类型实例。通过示例展示了如何创建和操作类型实例,并将其序列化为JSON格式,以及如何从JSON格式反序列化回类型实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.net已经集成了json解析,类名叫DataContractJsonSerializer

DataContractJsonSerializer 类型公开以下成员。

 名称说明
公共方法受 Silverlight for Windows Phone 支持DataContractJsonSerializer(Type)初始化 DataContractJsonSerializer 类的新实例,以便序列化或反序列化指定类型的对象。
公共方法受 Silverlight for Windows Phone 支持DataContractJsonSerializer(Type, IEnumerable<Type>)初始化 DataContractJsonSerializer 类的新实例,以便序列化或反序列化指定类型的对象以及可在对象图中呈现的已知类型的集合。

属性
 
 名称说明
公共方法受 Silverlight for Windows Phone 支持Equals(Object)确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
受保护的方法受 Silverlight for Windows Phone 支持Finalize允许对象在垃圾回收对 Object 进行回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
公共方法受 Silverlight for Windows Phone 支持GetHashCode用作特定类型的哈希函数。 (继承自 Object。)
公共方法受 Silverlight for Windows Phone 支持GetType获取当前实例的 Type。 (继承自 Object。)
受保护的方法受 Silverlight for Windows Phone 支持MemberwiseClone创建当前 Object 的浅表副本。 (继承自 Object。)
公共方法受 Silverlight for Windows Phone 支持ReadObject以 JSON(JavaScript 对象表示法)格式读取文档流,并返回反序列化的对象。
公共方法受 Silverlight for Windows Phone 支持ToString返回表示当前对象的字符串。 (继承自 Object。)
公共方法受 Silverlight for Windows Phone 支持WriteObject将指定对象序列化为 JavaScript 对象表示法 (JSON) 数据,并将生成的 JSON 写入流中。

 

可以使用 DataContractJsonSerializer 类将类型实例序列化为 JSON 文档,并将 JSON 文档反序列化为类型实例。 例如,可以使用包含重要数据(如名称和地址)的属性创建一个名为 Person 的类型。 然后,可以创建和操作一个 Person 类实例,并在 JSON 文档中写入所有其属性值以便于以后检索。 可随后将该 JSON 文档反序列化为 Person 类,或者反序列化为另一个具有等效数据协定的类。

示例
 
 
 
namespace SL_DataContractJsonSerializer
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        //This uses an event handler, not SL data binding
        void OnClick(object sender, EventArgs args)
        {
            txtOutput1.Text = "Create a User object and serialize it.";
            string json = WriteFromObject();
            txtOutput2.Text = json.ToString(); // Displays: {"Age":42,"Name":"Bob"}

            txtOutput3.Text = "Deserialize the data to a User object.";
            string jsonString = "{'Name':'Bill', 'Age':53}";
            User deserializedUser = ReadToObject(jsonString);
            txtOutput4.Text = deserializedUser.Name; // Displays: Bill
            txtOutput5.Text = deserializedUser.Age.ToString(); // Displays: 53
        }
        // Create a User object and serialize it to a JSON stream.
        public static string WriteFromObject()
        {
            //Create User object.
            User user = new User("Bob", 42);

            //Create a stream to serialize the object to.
            MemoryStream ms = new MemoryStream();

            // Serializer the User object to the stream.
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
            ser.WriteObject(ms, user);
            byte[] json = ms.ToArray();
            ms.Close();
            return Encoding.UTF8.GetString(json, 0, json.Length);

        }

        // Deserialize a JSON stream to a User object.
        public static User ReadToObject(string json)
        {
            User deserializedUser = new User();
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
            DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
            deserializedUser = ser.ReadObject(ms) as User;
            ms.Close();
            return deserializedUser;
        }

    }

    [DataContract]
    public class User
    {
        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public int Age { get; set; }

        public User() { }

        public User(string newName, int newAge)
        {
            Name = newName;
            Age = newAge;
        }

    }

}

 

Silverlight
受以下版本支持:5、4、3
Silverlight for Windows Phone
受以下版本支持:Windows Phone OS 7.1、Windows Phone OS 7.0
XNA Framework
受以下版本支持:Windows Phone OS 7.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值