I am having trouble parsing the following JSON object from the Sitecore API:
{
"statusCode": 200,
"result": {
"totalCount": 1,
"resultCount": 1,
"items": [
{
"Category": "PAGE",
"Database": "web",
"DisplayName": "Profile",
"HasChildren": false,
"Icon": "/temp/IconCache/Network/32x32/earth.png",
"ID": "{7F51AD8B-4A8B-4DA5-87A8-374BEB900801}",
"Language": "en",
"LongID": "/{11111111-1111-1111-1111-111111111111}/{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}/{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}/{D608D67E-01F1-493C-B3B7-23176449CD10}/{7F51AD8B-4A8B-4DA5-87A8-374BEB900801}",
"MediaUrl": "/~/icon/Network/48x48/earth.png.aspx",
"Name": "Profile",
"Path": "/sitecore/content/COMPANY/SITE/PAGE",
"Template": "User Defined/COMPANY/Pages/Base Page",
"TemplateId": "{661AFEB1-8ECE-4D65-80A6-40AC160898D8}",
"TemplateName": "Base Page",
"Url": "~/link.aspx?_id=7F51AD8B4A8B4DA587A8374BEB900801&_z=z",
"Version": 1,
"Fields": {
"{B370A8AA-C7D1-4B79-9BD2-C94675808949}": {
"Name": "Title",
"Type": "Single-Line Text",
"Value": "Profile"
},
"{55373261-F234-444F-9967-E4821C9ACD2C}": {
"Name": "Search Results Text",
"Type": "Multi-Line Text",
"Value": ""
},
"{F7DBD22A-6BE1-4FEE-920C-DF1E688A1224}": {
"Name": "Meta Description",
"Type": "Multi-Line Text",
"Value": "Profile Page"
},
"{BC5B4A35-9526-4DF3-A1EB-3C6A01A52777}": {
"Name": "Tags",
"Type": "Multilist",
"Value": ""
},
"{2AFDEE31-FF47-4184-9BB5-3D17E283F110}": {
"Name": "Enable Meta NoIndex",
"Type": "Checkbox",
"Value": ""
},
"{31D6E245-E63A-4749-90F5-225892F29DB7}": {
"Name": "Enable Meta NoFollow",
"Type": "Checkbox",
"Value": ""
},
"{A79C9551-A6F4-4E9E-9CF4-3DE68C1E9BAB}": {
"Name": "Browser Title",
"Type": "Single-Line Text",
"Value": ""
},
"{4A907846-00BB-4417-BA0E-21B16F5F9875}": {
"Name": "Open Text",
"Type": "Multi-Line Text",
"Value": ""
}
}
}
]
}
}
The problem is with the Fields property - it should be some sort of list of fields, but instead, it looks like they are individual nested properties where the name of each property is an "{id}".
I wanted to do something like JsonConvert.DeserializeObject<Sitecore.Data.Items.Item>(jsonString)
, but I have not had success. I would really prefer to not have to write a custom deserializer, but its looking like thats my only option.
Even if I wanted to use dyanmic types, I could get as far as jObject.result.items[0].Fields... but then what? I can't presume that I will always know the IDs of these fields.
So, long story short, here's my questions:
- Is there another way to interact with the Sitecore API that would help me?
- Is there anyway around the ids-as-property-names problem when parsing/deserializing the JSON?
For what it's worth, This object is coming from the Sitecore API, which I am calling out to from a C# application using this approach:
var request = (HttpWebRequest)WebRequest.Create(itemUrl);
request.Headers.Add("X-Scitemwebapi-Username", apiUsername);
request.Headers.Add("X-Scitemwebapi-Password", password);
// get response
var response = (HttpWebResponse)request.GetResponse();
var responseStream = response.GetResponseStream();
(I don't think that really matters for tackling the JSON problem specifically, but maybe someone has seen this before and knows another way around?)
Thanks in advance.
Using JSON.Net I've done this as follows:
Now to get item(e.g., statusCode), you can do the following:
Answer:
Hope this helps.
To see Fields,e.g., you can do like this:
Instead of
test.Last.Last[0].Last
you can do this in loop or recursion as well. that was just an example.Result: