2016-10-24 3 views
0

У меня возникли проблемы с выяснением модели из данных JSON post.MVC5 Model Binding от JSON

JSON:

{ 
"http://www.xxxx.com/":{ 
    "articulo":[ 
     { 
      "descripcion":{ 
       "innerHTML":"Newskill Nukite Ratón Gaming MMO/MOBA RGB 16000 DPI", 
       "nodeName":"SPAN", 
       "treeDepth":17, 
       "className":"", 
       "childNodesLength":1, 
       "childrenLength":0, 
       "clientHeight":0, 
       "parentNodeName":"A", 
       "parentChildNodeslength":1 
      }, 
      "img":{ 
       "innerHTML":"", 
       "nodeName":"IMG", 
       "treeDepth":17, 
       "className":"", 
       "childNodesLength":0, 
       "childrenLength":0, 
       "height":210, 
       "clientHeight":210, 
       "parentNodeName":"A", 
       "parentChildNodeslength":3 
      } 
     }, 
     { 
      "comentarios":{ 
       "innerHTML":"(52)", 
       "nodeName":"SPAN", 
       "treeDepth":20, 
       "className":"", 
       "childNodesLength":1, 
       "childrenLength":0, 
       "clientHeight":0, 
       "parentNodeName":"DIV", 
       "parentChildNodeslength":15 
      } 
     } 
    ] 
} 

}

Моя модель:

public class GreatClass 
{ 
    public IList url { get; set; } = new List<KeyValuePair<string, IList>>(); 
    private IList groups { get; set; } = new List<KeyValuePair<string, IList[]>>(); 
    public IList[] subGroups { get; set; } 
    private IList metadata { get; set; } = new List<KeyValuePair<string, MetadataJSON>>(); 

    public partial class MetadataJSON 
    { 
     public string innerHTML { get; set; } 
     public string nodeName { get; set; } 
     public int treeDepth { get; set; } 
     public string className { get; set; } 
     public int childNodesLength { get; set; } 
     public int childrenLength { get; set; } 
     public Nullable<int> height { get; set; } 
     public int clientHeight { get; set; } 
     public string parentNodeName { get; set; } 
     public int parentChildNodesLength { get; set; } 
     public string name { get; set; } 
    } 
} 
  • У меня есть еще сомнения, здесь: я должен удалить new List<KeyValuePair<string, IList>>();new List<KeyValuePair<string, IList[]>>();, = new List<KeyValuePair<string, MetadataJSON>>(); заявления?

Итак, следуя схеме, и снизу вверх:

  1. У меня есть статические данные, что они будут всегда там - MetadataJSON -.
  2. У меня есть список со строкой по ключу, где значение MetadataJSON.
  3. Этот список является элементом массива (articulo), который содержит другие списки.
  4. Тогда у меня есть другой список со строкой как ключ и массив списков в качестве значения.
  5. И наконец, у меня есть еще один список со строкой как ключ, содержащий список как значение.

Я немного потерян, потому что я думаю, что моя логическая реализация в порядке, и ошибка, вероятно, связана с поколением JSON.

Конечно, метод моего контроллера:

[HttpPost] 
    public ActionResult GetJSONData(GreatClass JSONData) 
    { 
     if (ModelState.IsValid) 
     { 
      return Json(JSONData); 
     } 
     else 
     { 
      string errorMessage = "<div class=\"validation-summary-errors\">" 
       + "The following errors occurred:<ul>"; 
      foreach (var key in ModelState.Keys) 
      { 
       var error = ModelState[key].Errors.FirstOrDefault(); 
       if (error != null) 
       { 
        errorMessage += "<li class=\"field-validation-error\">" 
        + error.ErrorMessage + "</li>"; 
       } 
      } 
      errorMessage += "</ul>"; 
      return Json(errorMessage); 
     } 
    } 

Ответ:

Making the POST

VS 2015 debugging

ответ

0

Вы отправляете объект с атрибутом имени "http://www.xxxx.com/" у вас нет что в вашей модели C# (и у вас не может быть такого имени). Вам необходимо отправить объект с этой структурой:

{ 
    "innerHTML":"Newskill Nukite Ratón Gaming MMO/MOBA RGB 16000 DPI", 
    "nodeName":"SPAN", 
    "treeDepth":17, 
    "className":"", 
    "childNodesLength":1, 
    "childrenLength":0, 
    "clientHeight":0, 
    "parentNodeName":"A", 
    "parentChildNodeslength":1 
} 
+0

Это не будет следовать структуре, которую я хотел бы сделать. –

+0

Потому что вы назначаете полный объект метаданных прямо к URL-адресу. А как насчет остальных? групп и подгрупп? Извините за 2 комментария, я нажал enter, и он отправил его напрямую. –

+0

Я бы хотел иметь много URL-адресов (в этом случае я написал только «xxx.com»), которые будут содержать много групп (в этом случае я написал только «articulo») и т. Д. –

0

Я «решен» моя проблема с использованием IDictionary и изменениями JSON (у меня нет другой идеи, как решить эту проблему с оригинальной JSON).

public class GreatClass 
{ 
    public IDictionary<string, IDictionary<string, IDictionary<string, MetadataJSON>[]>> url { get; set; } 

    public partial class MetadataJSON 
    { 
     public string innerHTML { get; set; } 
     public string nodeName { get; set; } 
     public int treeDepth { get; set; } 
     public string className { get; set; } 
     public int childNodesLength { get; set; } 
     public int childrenLength { get; set; } 
     public Nullable<int> height { get; set; } 
     public int clientHeight { get; set; } 
     public string parentNodeName { get; set; } 
     public int parentChildNodesLength { get; set; } 
     public string name { get; set; } 
    } 
} 

и JSON:

{ 
"url": 
[ 
    { 
     Key: 'http://xxxx.com', Value: 
     [ 
      { 
       Key: 'articulos', Value: 
       [ 
        { 
         "descripcion":{ 
          "innerHTML":"Newskill Nukite Ratón Gaming MMO/MOBA RGB 16000 DPI", 
          "nodeName":"SPAN", 
          "treeDepth":17, 
          "className":"", 
          "childNodesLength":1, 
          "childrenLength":0, 
          "clientHeight":0, 
          "parentNodeName":"A", 
          "parentChildNodeslength":1 
         }, 
         "img":{ 
          "innerHTML":"", 
          "nodeName":"IMG", 
          "treeDepth":17, 
          "className":"", 
          "childNodesLength":0, 
          "childrenLength":0, 
          "height":210, 
          "clientHeight":210, 
          "parentNodeName":"A", 
          "parentChildNodeslength":3 
         } 
        }, 
        { 
         "comentarios":{ 
          "innerHTML":"(52)", 
          "nodeName":"SPAN", 
          "treeDepth":20, 
          "className":"", 
          "childNodesLength":1, 
          "childrenLength":0, 
          "clientHeight":0, 
          "parentNodeName":"DIV", 
          "parentChildNodeslength":15 
         } 
        }  
       ] 
      } 
     ]          
    } 
] 

}

Пожалуйста, если вам удалось решить без редактирования оригинального JSON, было бы очень ценна.