我正在尝试为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;属性时指示)并再次执行该过程,直到我检索到所有项目我想要的数据。
你对我如何处理这个有什么想法吗?
谢谢!