【发布时间】:2017-09-03 19:07:09
【问题描述】:
我有以下 json,当通过 JSONLink 运行时,它会作为有效的 json 返回,并且我使用 json2csharp 创建了我的类。但我似乎无法获得所需的数据,我已阅读
How to retrieve data from json data
How to read data from json on C#
http://www.c-sharpcorner.com/article/working-with-json-string-in-C-Sharp/
http://www.c-sharpcorner.com/article/json-serialization-and-deserialization-in-c-sharp/
关于最后一个链接,一个数组:
数组以“[”开头,以“]”结尾。并且值是分开的 用逗号。例如,
所以,我已经阅读了所有内容,并且我的 JSON 在下面,并且我已按照以下步骤操作。
- 验证 json
- 创建的类
- 转换成字符串
- 反序列化对象
为什么会出现空引用异常
代码:
[{
"value": {
"dtgeContentTypeAlias": "carousel",
"value": {
"name": "Layout",
"carouselItem": [{
"name": "Item 1",
"ncContentTypeAlias": "carouselItem",
"textToDisplay": "text to display",
"image": "umb://media/caa97c18a35f4fbbae2efa20f20c81ae",
"navigationLinks": [{
"id": "1063",
"name": "Home",
"udi": "umb://document/4dfc35a72aea4be5b3496d1c02a09072",
"url": "/",
"icon": "icon-document",
"published": true
}]
}]
},
"id": "59dc484a-1078-2447-34a3-c7ed5256cd48"
},
"editor": {
"name": "Layout",
"alias": "docType",
"view": "/App_Plugins/DocTypeGridEditor/Views/doctypegrideditor.html",
"render": "/App_Plugins/DocTypeGridEditor/Render/DocTypeGridEditor.cshtml",
"icon": "icon-item-arrangement",
"config": {
"allowedDocTypes": [],
"nameTemplate": "",
"enablePreview": true,
"viewPath": "/Views/Partials/Grid/Editors/DocTypeGridEditor/",
"previewViewPath": "/Views/Partials/Grid/Editors/DocTypeGridEditor/Previews/",
"previewCssFilePath": "",
"previewJsFilePath": ""
}
},
"active": false
}]
var jsonDoc = control.JObject.ToString();
var myDetails = JsonConvert.DeserializeObject<CarouselItem>(jsonDoc);
var test2 = JObject.Parse(jsonDoc).First.ToString();
string test = myDetails.textToDisplay.ToString();
我在这里错过了什么!
-------------由 Json2CSharp 生成的所有类请求----------
public class NavigationLink
{
public string id { get; set; }
public string name { get; set; }
public string udi { get; set; }
public string url { get; set; }
public string icon { get; set; }
public bool published { get; set; }
}
public class CarouselItem
{
public string name { get; set; }
public string ncContentTypeAlias { get; set; }
public string textToDisplay { get; set; }
public string image { get; set; }
public List<NavigationLink> navigationLinks { get; set; }
}
public class Value2
{
public string name { get; set; }
public List<CarouselItem> carouselItem { get; set; }
}
public class Value
{
public string dtgeContentTypeAlias { get; set; }
public Value2 value { get; set; }
public string id { get; set; }
}
public class Config
{
public List<object> allowedDocTypes { get; set; }
public string nameTemplate { get; set; }
public bool enablePreview { get; set; }
public string viewPath { get; set; }
public string previewViewPath { get; set; }
public string previewCssFilePath { get; set; }
public string previewJsFilePath { get; set; }
}
public class Editor
{
public string name { get; set; }
public string alias { get; set; }
public string view { get; set; }
public string render { get; set; }
public string icon { get; set; }
public Config config { get; set; }
}
public class RootObject
{
public Value value { get; set; }
public Editor editor { get; set; }
public bool active { get; set; }
}
-------------转换为字符串时的完整对象--------
jsonDoc "{\r\n \"value\": {\r\n \"dtgeContentTypeAlias\": \"carousel\",\r\n \"value\": {\r\n \"name\": \"Layout\",\r\n \"carouselItem\": [\r\n {\r\n \"name\": \"Item 1\",\r\n \"ncContentTypeAlias\": \"carouselItem\",\r\n \"textToDisplay\": \"text to display\",\r\n \"image\": \"umb://media/caa97c18a35f4fbbae2efa20f20c81ae\",\r\n \"navigationLinks\": [\r\n {\r\n \"id\": \"1063\",\r\n \"name\": \"Home\",\r\n \"udi\": \"umb://document/4dfc35a72aea4be5b3496d1c02a09072\",\r\n \"url\": \"/\",\r\n \"icon\": \"icon-document\",\r\n \"published\": true\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n \"id\": \"59dc484a-1078-2447-34a3-c7ed5256cd48\"\r\n },\r\n \"editor\": {\r\n \"name\": \"Layout\",\r\n \"alias\": \"docType\",\r\n \"view\": \"/App_Plugins/DocTypeGridEditor/Views/doctypegrideditor.html\",\r\n \"render\": \"/App_Plugins/DocTypeGridEditor/Render/DocTypeGridEditor.cshtml\",\r\n \"icon\": \"icon-item-arrangement\",\r\n \"config\": {\r\n \"allowedDocTypes\": [],\r\n \"nameTemplate\": \"\",\r\n \"enablePreview\": true,\r\n \"viewPath\": \"/Views/Partials/Grid/Editors/DocTypeGridEditor/\",\r\n \"previewViewPath\": \"/Views/Partials/Grid/Editors/DocTypeGridEditor/Previews/\",\r\n \"previewCssFilePath\": \"\",\r\n \"previewJsFilePath\": \"\"\r\n }\r\n },\r\n \"active\": false\r\n}" string
【问题讨论】:
-
我们需要查看更多您的代码。如果上面粘贴的 JSON 是
jsonDoc变量的值,那么它不会成功反序列化为CarouselItem,因为结构(可能)不匹配...... -
嗨丹尼尔,你还需要什么其他代码
-
看看 json2csharp 生成的类会很有价值。
-
嗨丹尼尔,添加了所有课程
-
你的 json 是一个数组。
JsonConvert.DeserializeObject<List<RootObject>>(originaljson);