在JSON Pagination / Json.net中正确使用“$ ref”属性

时间:2014-11-13 15:12:05

标签: c# json pagination json.net

我正在尝试为RESTful Web服务编写C#类,该服务返回一些项目但使用JSON分页。我使用JSON.net进行序列化和反序列化。 我有以下代码:

        static void RefTest()
        {
            PageTest PageToTest = new PageTest();
            PageToTest.next = new PageTest.PageLink();
            PageToTest.next.reference = "https://www.example.com/RESTQuery/?page=1";
            PageToTest.items = new List<string>();
            PageToTest.items.Add("Car");
            PageToTest.items.Add("Truck");
            PageToTest.items.Add("Plane");
            string JSON = JsonConvert.SerializeObject(PageToTest);
            PageTest DeserializedPageTest = JsonConvert.DeserializeObject<PageTest>(JSON);
        }

虽然该课程如下:

        public class PageTest
        {
            public PageLink next;
            public List<string> items;
            public class PageLink
            {
                [JsonProperty("$ref")]
                public string reference;
            }
        }

当我将其序列化为字符串时,我得到了预期的结果:

{
    "next": {
            "$ref":"https://www.example.com/RESTQuery/?page=1"
            },
    "items":
            [
            "Car",
            "Truck",
            "Plane"
            ]
}

到目前为止,一切正常,看起来json.net在序列化为字符串时没有对$ ref属性做任何特殊处理。

然而,在解析字符串时,json.net识别出名为&#34; $ ref&#34;的属性。作为对某些id(它无法找到)的引用,并且不会将其放回到反序列化的对象上。

这是可以预料到的,但是网络服务正在以这种方式分发分页(使用&#34; next&#34;,&#34; previous&#34;&#34; last&#34;属性)。

基本上,因为服务器只给我所有的价值而不切实际(我猜?)是不可能的。因此,当我想要获取所有项目时,我将不得不反序列化JSON响应,检查其他项目(当有&#34; next&#34;属性时指示)并再次执行该过程,直到我检索到所有项目我想要的数据。

你对我如何处理这个有什么想法吗?

谢谢!

0 个答案:

没有答案