UWP C#-如何使用Windows.Data.Json将JsonObject反序列化到类中?

UWP C#-如何使用Windows.Data.Json将JsonObject反序列化到类中?,c#,json,C#,Json,我不想使用Newtonsoft的Json.Net库。如果我能在这个项目中帮助它,我将避免任何第三方依赖 如果我的JSON如下所示: { “has_more_items”:false, “项目\u html”:“…”, “最小位置”:“1029839231781429248” } 我有一个类似这样的类: 公共类TwitterJson { bool hasMore{get;set;}//有\u多个\u项 字符串rawText{get;set;}//items\u html 字符串nextKey{g

我不想使用Newtonsoft的Json.Net库。如果我能在这个项目中帮助它,我将避免任何第三方依赖

如果我的JSON如下所示:

{
“has_more_items”:false,
“项目\u html”:“…”,
“最小位置”:“1029839231781429248”
}
我有一个类似这样的类:

公共类TwitterJson
{
bool hasMore{get;set;}//有\u多个\u项
字符串rawText{get;set;}//items\u html
字符串nextKey{get;set;}//min\u位置
}
我有一个包含上述JSON的JsonObject:

JsonObject theJson=JsonObject.Parse(结果);

如何将JsonObject反序列化到类中?我一直在试图找到一个明确的例子,我发现的所有东西都使用Json.Net。

您必须使用
[DataContract]
[DataMember]
属性来装饰您的类。将json写入内存流并使用

这是一个更详细的示例

除了@Nkosi的回答之外,下面还对JSON.net和其他备选方案进行了一些比较:

我一直在试图找到一个明确的例子,我发现的所有东西都使用Json.Net

因为重新设计现有功能是浪费时间,尤其是当所有的艰苦工作都已经为您完成时

如果坚持不使用它,则必须基于预期的JSON手动构建对象模型

例如,假设公共可用的属性

public class TwitterJson {
    public bool hasMore { get; set; } // has_more_items
    public string rawText { get; set; } // items_html
    public string nextKey { get; set; } // min_position
}
然后将上述内容解析为所需的对象模型

JsonObject theJson = JsonObject.Parse(result);
var model = new TwitterJson {
    hasMore = theJson.GetNamedBoolean("has_more_items"),
    rawText = theJson.GetNamedString("items_html"),
    nextKey = theJson.GetNamedString("min_position")
};

正如@Dimith所提到的,您需要使用
[DataContract]
[DateMember]
来装饰您的类,请参阅下面的代码,这些代码将您的JSON转换为给定的对象

 // Deserialize a JSON string to a given object.  
 public static T ReadToObject<T>(string json) where T: class, new()
 { 
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
    using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
    {
       return ser.ReadObject(stream) as T;
    }
 }
关于如何使用的示例:

var result = "{\"has_more_items\": false, \"items_html\": \"...\",\"min_position\": \"1029839231781429248\"}";
var obj = ReadToObject<TwitterJson>(result);
var result=“{\”有更多的项目\”:false、\“项目html\”:\“…\”、\“最小位置\\”:\“1029839231781429248\”;
var obj=读取对象(结果);

这是一个很有道理的问题,但我很好奇为什么您需要避免所有第三方依赖,即使是。用于解析和格式化JSON,而不是(反)序列化。如果需要序列化程序,请参阅,其答案包括几个内置选项。
DataContractJsonSerializer
是否首选?从我所读到的内容来看,这是一个非常低效的实现——仍然是这样吗?老实说,首选的是json.net。但是,正如您所问的,另一种反序列化程序是
DataContractJsonSerializer
。不过,我不确定效率有多低。我看到一些人提到它有点过度工程化,这是有道理的。我不清楚
Windows.Data.Json
是否内置了反序列化程序。@ClairelyClaire没有。据我所知。你可以写你自己的,但同样的,这将是一个非常少的回报大量的工作。
var result = "{\"has_more_items\": false, \"items_html\": \"...\",\"min_position\": \"1029839231781429248\"}";
var obj = ReadToObject<TwitterJson>(result);