如何在 WinRT 中反序列化 JSON

本文关键字:反序列化 JSON WinRT | 更新日期: 2023-09-27 18:36:45

如何获取一个对象并将其转换为 JSON 字符串,然后从字符串转换回该对象,特别是在 Windows 8 Metro 应用程序的 WinRT 中?

如何在 WinRT 中反序列化 JSON

像这样:

using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
public static T Deserialize<T>(string json)
{
    var _Bytes = Encoding.Unicode.GetBytes(json);
    using (MemoryStream _Stream = new MemoryStream(_Bytes))
    {
        var _Serializer = new DataContractJsonSerializer(typeof(T));
        return (T)_Serializer.ReadObject(_Stream);
    }
}
public static string Serialize(object instance)
{
    using (MemoryStream _Stream = new MemoryStream())
    {
        var _Serializer = new DataContractJsonSerializer(instance.GetType());
        _Serializer.WriteObject(_Stream, instance);
        _Stream.Position = 0;
        using (StreamReader _Reader = new StreamReader(_Stream)) 
        { return _Reader.ReadToEnd(); }
    }
}

首先使用 http://json2csharp.com/生成 C# 类然后使用 http://james.newtonking.com/pages/json-net.aspx 进行解析

我的用户类目前如下所示:

public class User
{
    public string id { get; set; }
    public string username { get; set; }
    public string full_name { get; set; }
    public string profile_picture { get; set; }
    public string bio { get; set; }
    public string website { get; set; }
    public Counts counts { get; set; }
    public static User SingleFromJSON(string jsonString)
    {
        return JsonConvert.DeserializeObject<SingleUser>(jsonString).data;
    }
    public static User MultipleFromJSON(string jsonString)
    {
        return JsonConvert.DeserializeObject<SingleUser>(jsonString).data;
    }
    private class SingleUser
    {
        public User data { get; set; }
    }
    private class MultipleUsers
    {
        public List<User> data { get; set; }
    }
}
public class Counts
{
    public int media { get; set; }
    public int follows { get; set; }
    public int followed_by { get; set; }
}

超级简单的:D

OP 要求提供与 Windows 8 上的地铁应用程序相关的答案,但在对 WinRT 的序列化/反序列化 json 进行基本搜索时会出现这个问题,因此我为那些正在寻找更现代方法的人添加了这个答案。

现代 WinRT 具有针对此挑战的内置处理程序,因此无需使用 JSON.net

使用Windows.Data.Json中的JsonObject

对于序列化,请使用 ParseTryParse

要反序列化但仍采用 JSON 格式,请使用 Stringify