反序列化服务器将String返回到JSON

时间:2018-06-13 22:12:08

标签: c# json sharepoint

我正在使用SharePoint REST API进行搜索。我正在撤回JSON结果并按如下方式阅读:

HttpWebRequest endpointRequest = (HttpWebRequest)HttpWebRequest.Create(querystring);

endpointRequest.Method = "GET";
endpointRequest.Accept = "application/json; odata=verbose";
endpointRequest.UseDefaultCredentials = true;
HttpWebResponse endpointResponse =(HttpWebResponse)endpointRequest.GetResponse();

Stream webStream = endpointResponse.GetResponseStream();
StreamReader responseReader = new StreamReader(webStream);
var results = responseReader.ReadToEnd();

这很好用,我可以看到JSON格式的结果。所以我在VS 2017中使用JSON创建了一个类,这里​​是从JSON创建的类(这是使用File =>自动完成的; Paste Special =>将JSON粘贴为类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class SharePointRESTResults
    {
        public class Rootobject
        {
            public D d { get; set; }
        }

        public class D
        {
            public Query query { get; set; }
        }

        public class Query
        {
            public __Metadata __metadata { get; set; }
            public int ElapsedTime { get; set; }
            public Primaryqueryresult PrimaryQueryResult { get; set; }
            public Properties1 Properties { get; set; }
            public Secondaryqueryresults SecondaryQueryResults { get; set; }
            public string SpellingSuggestion { get; set; }
            public Triggeredrules TriggeredRules { get; set; }
        }

        public class __Metadata
        {
            public string type { get; set; }
        }

        public class Primaryqueryresult
        {
            public __Metadata1 __metadata { get; set; }
            public Customresults CustomResults { get; set; }
            public string QueryId { get; set; }
            public string QueryRuleId { get; set; }
            public object RefinementResults { get; set; }
            public Relevantresults RelevantResults { get; set; }
            public object SpecialTermResults { get; set; }
        }

        public class __Metadata1
        {
            public string type { get; set; }
        }

        public class Customresults
        {
            public __Metadata2 __metadata { get; set; }
            public object[] results { get; set; }
        }

        public class __Metadata2
        {
            public string type { get; set; }
        }

        public class Relevantresults
        {
            public __Metadata3 __metadata { get; set; }
            public object GroupTemplateId { get; set; }
            public object ItemTemplateId { get; set; }
            public Properties Properties { get; set; }
            public object ResultTitle { get; set; }
            public object ResultTitleUrl { get; set; }
            public int RowCount { get; set; }
            public Table Table { get; set; }
            public int TotalRows { get; set; }
            public int TotalRowsIncludingDuplicates { get; set; }
        }

        public class __Metadata3
        {
            public string type { get; set; }
        }

        public class Properties
        {
            public Result[] results { get; set; }
        }

        public class Result
        {
            public __Metadata4 __metadata { get; set; }
            public string Key { get; set; }
            public string Value { get; set; }
            public string ValueType { get; set; }
        }

        public class __Metadata4
        {
            public string type { get; set; }
        }

        public class Table
        {
            public __Metadata5 __metadata { get; set; }
            public Rows Rows { get; set; }
        }

        public class __Metadata5
        {
            public string type { get; set; }
        }

        public class Rows
        {
            public Result1[] results { get; set; }
        }

        public class Result1
        {
            public __Metadata6 __metadata { get; set; }
            public Cells Cells { get; set; }
        }

        public class __Metadata6
        {
            public string type { get; set; }
        }

        public class Cells
        {
            public Result2[] results { get; set; }
        }

        public class Result2
        {
            public __Metadata7 __metadata { get; set; }
            public string Key { get; set; }
            public object Value { get; set; }
            public string ValueType { get; set; }
        }

        public class __Metadata7
        {
            public string type { get; set; }
        }

        public class Properties1
        {
            public Result3[] results { get; set; }
        }

        public class Result3
        {
            public __Metadata8 __metadata { get; set; }
            public string Key { get; set; }
            public string Value { get; set; }
            public string ValueType { get; set; }
        }

        public class __Metadata8
        {
            public string type { get; set; }
        }

        public class Secondaryqueryresults
        {
            public __Metadata9 __metadata { get; set; }
            public object[] results { get; set; }
        }

        public class __Metadata9
        {
            public string type { get; set; }
        }

        public class Triggeredrules
        {
            public __Metadata10 __metadata { get; set; }
            public object[] results { get; set; }
        }

        public class __Metadata10
        {
            public string type { get; set; }
        }

    }
}

所以我现在试图将结果反序列化如下:

 SharePointRESTResults resultX = JsonConvert.DeserializeObject<SharePointRESTResults>(results());

我需要的结果应该在Result2类中。我遇到的问题是这行是将resultX =设置为&#34; ConsoleApplication1.SharePointRESTResults&#34;仅此而已。我在这里查看了JSON序列化和反序列化:JSON Documentation但仍无法将结果输入到类中,因此我可以提取数据。我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

要点是 -

  • 帐户声明。
  • JsonProperty属性。

注意:如果您有一个对象哪些键可以更改,那么您需要使用

&#13;
&#13;
Dictionary<string, T>
&#13;
&#13;
&#13;

。一个普通班级不会为此工作;

&#13;
&#13;
List<T>
&#13;
&#13;
&#13;