2016-10-15 1 views
0

Matin all,Désérialisation Importer Io JSON avec plusieurs objets

Im utilisant Newtonsoft.JSON pour désérialiser une réponse JSON d'Import Io. J'ai utilisé avec succès http://json2csharp.com/ pour construire un modèle de données avec succès dans une instance pour accéder aux données, mais dans ce cas, un seul objet JSON a été renvoyé. Je travaille maintenant sur un nouveau morceau de JSON qui est renvoyé avec plusieurs objets et je rencontre des problèmes avec le message d'erreur suivant:

Newtonsoft.Json.JsonSerializationException: Impossible de désérialiser l'objet JSON en cours (par exemple {"name ":" value "}) dans type 'System.Collections.Generic.List`1 [OSP.Shop_DTO + RootObject]' car le type requiert un tableau JSON (par exemple [1,2,3]) pour désérialiser correctement. Pour corriger cette erreur, changez le JSON en un tableau JSON (par exemple [1,2,3]) ou changez le type désérialisé pour qu'il soit un type .NET normal (par exemple, pas un type primitif comme un entier, pas un type de collection) comme un tableau ou une liste) qui peut être désérialisé à partir d'un objet JSON. JsonObjectAttribute peut également être ajouté au type pour le forcer à désérialiser à partir d'un objet JSON. Path 'url', ligne 1, 7. »

Mon JSON ressemble à ceci:

{ 
    "url": "http://www.myurl.com/-shop-item.html", 
    "result": { 
     "extractorData": { 
      "url": "http://www.myurl.com/-shop-item.html", 
      "resourceId": "1db49f66afc2f234cb5ab470f0c39e0c", 
       "data": [ 
       { 
        "group": [ 
         { 
          "BN_shop_1KG": [ 
           { 
            "text": "$36.00" 
           } 
          ], 
          "BN_shop_2KG": [ 
           { 
            "text": "$69" 
           } 
          ], 
          "BN_shop_3KG": [ 
           { 
            "text": "$97" 
           } 
          ], 
          "BN_VEGE_5KG": [ 
           { 
            "text": "3 KG = $97" 
           } 
          ], 
          "BN_shop_4KG": [ 
           { 
            "text": "$124" 
           } 
          ], 
          "BN_shop_5KG": [ 
           { 
            "text": "$149" 
           } 
          ] 
         } 
        ] 
       } 
      ] 
     }, 
     "pageData": { 
      "resourceId": "1db49f66afc2f234cb5ab470f0c39e0c", 
      "statusCode": 200, 
      "timestamp": 1476432605275 
     }, 
     "timestamp": 1476432606594, 
     "sequenceNumber": 0 
    } 
}{ 
    "url": "http://www.myurl.com/-shop-concentrate.html", 
    "result": { 
     "extractorData": { 
      "url": "http://www.myurl.com/-shop-concentrate.html", 
      "resourceId": "dd4837cc7d0085eae005243c7bd8ca8a", 
      "data": [ 
       { 
        "group": [ 
         { 
          "BN_shop_1KG": [ 
           { 
            "text": "$27.00" 
           } 
          ], 
          "BN_shop_2KG": [ 
           { 
            "text": "$49" 
           } 
          ], 
          "BN_shop_3KG": [ 
           { 
            "text": "$69" 
           } 
          ], 
          "BN_VEGE_5KG": [ 
           { 
            "text": "3 KG = $69" 
           } 
          ], 
          "BN_shop_4KG": [ 
           { 
            "text": "$84" 
           } 
          ], 
          "BN_shop_5KG": [ 
           { 
            "text": "$99" 
           } 
          ] 
         } 
        ] 
       } 
      ] 
     }, 
     "pageData": { 
      "resourceId": "dd4837cc7d0085eae005243c7bd8ca8a", 
      "statusCode": 200, 
      "timestamp": 1476432604237 
     }, 
     "timestamp": 1476432605124, 
     "sequenceNumber": 1 
    } 
}{ 
    "url": "http://www.myurl.comshop-matrix.html", 
    "result": { 
     "extractorData": { 
      "url": "http://www.myurl.comshop-matrix.html", 
      "resourceId": "deee30ffa0098e017a06c0e0c805e133", 
      "data": [ 
       { 
        "group": [ 
         { 
          "BN_shop_1KG": [ 
           { 
            "text": "$29.00" 
           } 
          ], 
          "BN_shop_2KG": [ 
           { 
            "text": "$56" 
           } 
          ], 
          "BN_shop_3KG": [ 
           { 
            "text": "$79" 
           } 
          ], 
          "BN_VEGE_5KG": [ 
           { 
            "text": "3 KG = $79" 
           } 
          ], 
          "BN_shop_4KG": [ 
           { 
            "text": "$99" 
           } 
          ], 
          "BN_shop_5KG": [ 
           { 
            "text": "$119" 
           } 
          ] 
         } 
        ] 
       } 
      ] 
     }, 
     "pageData": { 
      "resourceId": "deee30ffa0098e017a06c0e0c805e133", 
      "statusCode": 200, 
      "timestamp": 1476432602408 
     }, 
     "timestamp": 1476432603204, 
     "sequenceNumber": 2 
    } 
}{ 
    "url": "http://www.myurl.comsoy-shop-item.html", 
    "result": { 
     "extractorData": { 
      "url": "http://www.myurl.comsoy-shop-item.html", 
      "resourceId": "5593aad40f95ba868626e47a1b550813", 
      "data": [ 
       { 
        "group": [ 
         { 
          "BN_shop_1KG": [ 
           { 
            "text": "$25.00" 
           } 
          ], 
          "BN_shop_2KG": [ 
           { 
            "text": "$45" 
           } 
          ], 
          "BN_shop_3KG": [ 
           { 
            "text": "$89" 
           } 
          ], 
          "BN_VEGE_5KG": [ 
           { 
            "text": "5 KG = $89" 
           } 
          ], 
          "BN_shop_4KG": [ 
           { 
            "text": "$175" 
           } 
          ], 
          "BN_shop_5KG": [ 
           { 
            "text": "$339" 
           } 
          ] 
         } 
        ] 
       } 
      ] 
     }, 
     "pageData": { 
      "resourceId": "5593aad40f95ba868626e47a1b550813", 
      "statusCode": 200, 
      "timestamp": 1476432602479 
     }, 
     "timestamp": 1476432603847, 
     "sequenceNumber": 3 
    } 
}{ 
    "url": "http://www.myurl.compea-shop.html", 
    "result": { 
     "extractorData": { 
      "url": "http://www.myurl.compea-shop.html", 
      "resourceId": "f91e05d0265ab5a5f7f948c57a05bced", 
      "data": [ 
       { 
        "group": [ 
         { 
          "BN_shop_1KG": [ 
           { 
            "text": "$25.00" 
           } 
          ], 
          "BN_shop_2KG": [ 
           { 
            "text": "$45" 
           } 
          ], 
          "BN_shop_3KG": [ 
           { 
            "text": "$89" 
           } 
          ], 
          "BN_VEGE_5KG": [ 
           { 
            "text": "5 KG = $89" 
           } 
          ], 
          "BN_shop_4KG": [ 
           { 
            "text": "$169" 
           } 
          ], 
          "BN_shop_5KG": [ 
           { 
            "text": "$319" 
           } 
          ] 
         } 
        ] 
       } 
      ] 
     }, 
     "pageData": { 
      "resourceId": "f91e05d0265ab5a5f7f948c57a05bced", 
      "statusCode": 200, 
      "timestamp": 1476432605227 
     }, 
     "timestamp": 1476432606451, 
     "sequenceNumber": 4 
    } 
} 

modèle ressemble à ceci:

public class BNShop1KG 
{ 
    public string text { get; set; } 
} 

public class BNShop2KG 
{ 
    public string text { get; set; } 
} 

public class BNShop3KG 
{ 
    public string text { get; set; } 
} 

public class BNVEGE5KG 
{ 
    public string text { get; set; } 
} 

public class BNShop4KG 
{ 
    public string text { get; set; } 
} 

public class BNShop5KG 
{ 
    public string text { get; set; } 
} 

public class Group 
{ 
    public List<BNShop1KG> BN_shop_1KG { get; set; } 
    public List<BNShop2KG> BN_shop_2KG { get; set; } 
    public List<BNShop3KG> BN_shop_3KG { get; set; } 
    public List<BNVEGE5KG> BN_VEGE_5KG { get; set; } 
    public List<BNShop4KG> BN_shop_4KG { get; set; } 
    public List<BNShop5KG> BN_shop_5KG { get; set; } 
} 

public class Datum 
{ 
    public List<Group> group { get; set; } 
} 

public class ExtractorData 
{ 
    public string url { get; set; } 
    public string resourceId { get; set; } 
    public List<Datum> data { get; set; } 
} 

public class PageData 
{ 
    public string resourceId { get; set; } 
    public int statusCode { get; set; } 
    public long timestamp { get; set; } 
} 

public class Result 
{ 
    public ExtractorData extractorData { get; set; } 
    public PageData pageData { get; set; } 
    public long timestamp { get; set; } 
    public int sequenceNumber { get; set; } 
} 

public class RootObject 
{ 
    public string url { get; set; } 
    public Result result { get; set; } 
} 

Dans mon code i J'essaie d'accéder à la valeur 'texte' dans 'BN_shop_1KG' à partir du premier objet JSON Cet élément:

"BN_shop_1KG": [ 
    { 
     "text": "$36.00" 
    } 

J'ai essayé ce qui suit dans mon code, mais je reçois l'erreur décrite ci-dessus. D'après ce que je comprends la lecture des discussions précédentes à ce sujet est que je vais devoir utiliser un deserialize en liste pour gérer JSON reçu de cette manière:

List<Shop_DTO.RootObject> obj = JsonConvert.DeserializeObject<List<Shop_DTO.RootObject>>(_rawHtmlResult); 

    var price = obj.First().result.extractorData.data[0].group[0].BN_shop_1kg[0].text; 
    Debug.WriteLine("Price for item {0}", price); 

Toute aide serait grandement apprécié, je suis coincé sur ceci pour quelques jours :(

Répondre

1

Le fichier Json est invalide, puisqu'il contient plusieurs objets Json, il doit s'agir d'un tableau Json qui doit être entouré de [], et un autre élément se trouve entre chaque objet Json, besoin ","

var jsonText = @"[{ 
""url"": ""http://www.myurl.com/-shop-item.html"", 
""result"": { 
    ""extractorData"": { 
     ""url"": ""http://www.myurl.com/-shop-item.html"", 
     ""resourceId"": ""1db49f66afc2f234cb5ab470f0c39e0c"", 
      ""data"": [ 
      { 
       ""group"": [ 
        { 
         ""BN_shop_1KG"": [ 
          { 
           ""text"": ""$36.00"" 
          } 
         ], 
         ""BN_shop_2KG"": [ 
          { 
           ""text"": ""$69"" 
          } 
         ], 
         ""BN_shop_3KG"": [ 
          { 
           ""text"": ""$97"" 
          } 
         ], 
         ""BN_VEGE_5KG"": [ 
          { 
           ""text"": ""3 KG = $97"" 
          } 
         ], 
         ""BN_shop_4KG"": [ 
          { 
           ""text"": ""$124"" 
          } 
         ], 
         ""BN_shop_5KG"": [ 
          { 
           ""text"": ""$149"" 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
    ""pageData"": { 
     ""resourceId"": ""1db49f66afc2f234cb5ab470f0c39e0c"", 
     ""statusCode"": 200, 
     ""timestamp"": 1476432605275 
    }, 
    ""timestamp"": 1476432606594, 
    ""sequenceNumber"": 0 
} 
},{ 
""url"": ""http://www.myurl.com/-shop-concentrate.html"", 
""result"": { 
    ""extractorData"": { 
     ""url"": ""http://www.myurl.com/-shop-concentrate.html"", 
     ""resourceId"": ""dd4837cc7d0085eae005243c7bd8ca8a"", 
     ""data"": [ 
      { 
       ""group"": [ 
        { 
         ""BN_shop_1KG"": [ 
          { 
           ""text"": ""$27.00"" 
          } 
         ], 
         ""BN_shop_2KG"": [ 
          { 
           ""text"": ""$49"" 
          } 
         ], 
         ""BN_shop_3KG"": [ 
          { 
           ""text"": ""$69"" 
          } 
         ], 
         ""BN_VEGE_5KG"": [ 
          { 
           ""text"": ""3 KG = $69"" 
          } 
         ], 
         ""BN_shop_4KG"": [ 
          { 
           ""text"": ""$84"" 
          } 
         ], 
         ""BN_shop_5KG"": [ 
          { 
           ""text"": ""$99"" 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
    ""pageData"": { 
     ""resourceId"": ""dd4837cc7d0085eae005243c7bd8ca8a"", 
     ""statusCode"": 200, 
     ""timestamp"": 1476432604237 
    }, 
    ""timestamp"": 1476432605124, 
    ""sequenceNumber"": 1 
} 
},{ 
""url"": ""http://www.myurl.comshop-matrix.html"", 
""result"": { 
    ""extractorData"": { 
     ""url"": ""http://www.myurl.comshop-matrix.html"", 
     ""resourceId"": ""deee30ffa0098e017a06c0e0c805e133"", 
     ""data"": [ 
      { 
       ""group"": [ 
        { 
         ""BN_shop_1KG"": [ 
          { 
           ""text"": ""$29.00"" 
          } 
         ], 
         ""BN_shop_2KG"": [ 
          { 
           ""text"": ""$56"" 
          } 
         ], 
         ""BN_shop_3KG"": [ 
          { 
           ""text"": ""$79"" 
          } 
         ], 
         ""BN_VEGE_5KG"": [ 
          { 
           ""text"": ""3 KG = $79"" 
          } 
         ], 
         ""BN_shop_4KG"": [ 
          { 
           ""text"": ""$99"" 
          } 
         ], 
         ""BN_shop_5KG"": [ 
          { 
           ""text"": ""$119"" 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
    ""pageData"": { 
     ""resourceId"": ""deee30ffa0098e017a06c0e0c805e133"", 
     ""statusCode"": 200, 
     ""timestamp"": 1476432602408 
    }, 
    ""timestamp"": 1476432603204, 
    ""sequenceNumber"": 2 
} 
},{ 
""url"": ""http://www.myurl.comsoy-shop-item.html"", 
""result"": { 
    ""extractorData"": { 
     ""url"": ""http://www.myurl.comsoy-shop-item.html"", 
     ""resourceId"": ""5593aad40f95ba868626e47a1b550813"", 
     ""data"": [ 
      { 
       ""group"": [ 
        { 
         ""BN_shop_1KG"": [ 
          { 
           ""text"": ""$25.00"" 
          } 
         ], 
         ""BN_shop_2KG"": [ 
          { 
           ""text"": ""$45"" 
          } 
         ], 
         ""BN_shop_3KG"": [ 
          { 
           ""text"": ""$89"" 
          } 
         ], 
         ""BN_VEGE_5KG"": [ 
          { 
           ""text"": ""5 KG = $89"" 
          } 
         ], 
         ""BN_shop_4KG"": [ 
          { 
           ""text"": ""$175"" 
          } 
         ], 
         ""BN_shop_5KG"": [ 
          { 
           ""text"": ""$339"" 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
    ""pageData"": { 
     ""resourceId"": ""5593aad40f95ba868626e47a1b550813"", 
     ""statusCode"": 200, 
     ""timestamp"": 1476432602479 
    }, 
    ""timestamp"": 1476432603847, 
    ""sequenceNumber"": 3 
} 
},{ 
""url"": ""http://www.myurl.compea-shop.html"", 
""result"": { 
    ""extractorData"": { 
     ""url"": ""http://www.myurl.compea-shop.html"", 
     ""resourceId"": ""f91e05d0265ab5a5f7f948c57a05bced"", 
     ""data"": [ 
      { 
       ""group"": [ 
        { 
         ""BN_shop_1KG"": [ 
          { 
           ""text"": ""$25.00"" 
          } 
         ], 
         ""BN_shop_2KG"": [ 
          { 
           ""text"": ""$45"" 
          } 
         ], 
         ""BN_shop_3KG"": [ 
          { 
           ""text"": ""$89"" 
          } 
         ], 
         ""BN_VEGE_5KG"": [ 
          { 
           ""text"": ""5 KG = $89"" 
          } 
         ], 
         ""BN_shop_4KG"": [ 
          { 
           ""text"": ""$169"" 
          } 
         ], 
         ""BN_shop_5KG"": [ 
          { 
           ""text"": ""$319"" 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
    ""pageData"": { 
     ""resourceId"": ""f91e05d0265ab5a5f7f948c57a05bced"", 
     ""statusCode"": 200, 
     ""timestamp"": 1476432605227 
    }, 
    ""timestamp"": 1476432606451, 
    ""sequenceNumber"": 4 
} 
}]" 

Ensuite, vous pouvez utiliser votre code pour obtenir le prix. Btw, il ya une faute de frappe dans votre code, BN_shop_1kg est censé être BN_shop_1KG

+0

Un grand merci, donc j'ai essayé cela et cela fonctionne, mais comme le json est retourné via une API REST comment vais-je pouvoir insérer le "," entre les objets? Je peux modifier le JSON assez facilement pour ajouter les caractères [], mais je ne sais pas comment insérer le "," de manière fiable. J'ai le code ci-dessous pour ajouter le [], puis-je construire cela? – IronWorkshop

+0

Désolé, le code est ici: var jsonText = @ "[" + _rawHtmlResult + "]"; – IronWorkshop

+1

jsonText.Replace ("} {", "}, {"); –