【发布时间】:2019-01-29 05:58:57
【问题描述】:
我如何获取一个对象并将其转换为 JSON 字符串,然后从字符串返回到该对象,特别是在 WinRT 中用于我的 Windows 8 Metro 应用程序?
【问题讨论】:
标签: c# winrt-xaml
我如何获取一个对象并将其转换为 JSON 字符串,然后从字符串返回到该对象,特别是在 WinRT 中用于我的 Windows 8 Metro 应用程序?
【问题讨论】:
标签: c# winrt-xaml
像这样:
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 上的 Metro 应用程序相关的答案,但是在对 WinRT 的序列化/反序列化 json 进行基本搜索时会出现这个问题,所以我为那些正在寻找的人添加了这个答案一种更现代的方法。
现代 WinRT 已针对此挑战内置处理程序,因此无需使用 JSON.net
使用来自Windows.Data.Json的JsonObject
对于反序列化但仍为 JSON 格式,请使用 Stringify。
【讨论】: