How do I de/serialize JSON in WinRT?

前端 未结 3 1203
灰色年华
灰色年华 2020-12-08 05:10

How do I take an object and convert it to a JSON string and then back into that object from a string, specifically, in WinRT for my Windows 8 Metro application?

相关标签:
3条回答
  • 2020-12-08 05:51

    OP asked for an answer that pertained to metro apps on Windows 8, but this question comes up when doing a basic search for serializing/de-serializing jsons for WinRT, so I'm adding this answer for those who are looking for a more modern approach.

    Modern WinRT has built-in handlers for this challenge, so no need to use JSON.net

    Use JsonObject from Windows.Data.Json

    For serializing use Parse or TryParse.

    For de-serializing but still in JSON format, use Stringify.

    0 讨论(0)
  • 2020-12-08 06:00

    Like this:

    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(); }
        }
    }
    
    0 讨论(0)
  • 2020-12-08 06:04

    First generate C# classes with http://json2csharp.com/ Then use http://james.newtonking.com/pages/json-net.aspx for parsing

    My user class currently looks like this:

    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; }
    }
    

    Super easy :D

    0 讨论(0)
提交回复
热议问题