Problem z deserializacją obiektu - JSON.NET

0

Witajcie!
Mam sobie kod wysyłający zapytanie do pewnego API i zwracane jest mniejwięcej coś takiego:

{
  "log_id": 2206685698711198786,
  "words_result_num": 33,
  "words_result": [
    {
      "words": "Zerknat na prezent, ktory przysHala mu Gabby. Serce w nim zamar"
    },
    {
      "words": "lo. Rany, byl po prostu w siodmym niebie"
    },
    {
      "words": "Gabby"
    },
    {
      "words": "lle to zgubilismy? pomyslal Scisnat brzuch Prawie trzy kilogra"
    },
    {
      "words": "my w ciagu miesiaca Jesli wysika sie przed wazeniem"
    },
    {
      "words": "Chrupal i popijat, zahujac, ze cola nie jest zimna. Powinien ja"
    },
    {
      "words": "wczesniej wstawic do lodowki. Dlaczego zapominam o tylu rzeczach"
    },
    {
      "words": "Frank Walsh wiedziat, ze ma problemy z koncentracja, ale rownoczes-"
    },
    {
      "words": "nie byt dummy, uwazajac to za pewnego rodzaju negatywna kompen"
    },
    {
      "words": "sacje licznych zdolnosci w innych dziedzinach"
    },
    {
      "words": "Na przyklad jego nozy"
    },
    {
      "words": "Spojrzat na kolekcje broni siecznej, ktora zajmowata dwa regal"
    },
    {
      "words": "Kiedy wreszcie przyjdzie kukri? Pomyslat o pieknym zakrzywio-"
    },
    {
      "words": "nym nozu ze zdjecia na e Bayu, przedstawiajacego klasyczny nepalski"
    },
    {
      "words": "noz woJskowy"
    },
    {
      "words": "Po chili wrocif do rzeczy wistosci"
    },
    {
      "words": "Ciagle kupuje te pieprzone karteczki samoprzylepne. Musze"
    },
    {
      "words": "pamietac, Zeby uzywac ich nie tylko do podpierania nog stolu"
    },
    {
      "words": "Napisz: Wtoiye cole do lodowki"
    },
    { 

Następnie próbuję zdeserializować obiekt JSON do obiektu RecognitionResultOBJ, co robię tak:

//RecogResultObj OBJ = JsonConvert.DeserializeObject<RecogResultObj>(RecognitionResult.ToString());
			//			String.Join(" ", OBJ.words_result);

Ale żeby nie było tak koloro, dostaję taki błąd:
Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: {. Path 'words_result', line 5, position 5.'

Co robię źle?

0

To pokaż jeszcze RecogResultObj jak wygląda

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hawk_Eye
{
	public class RecogResultObj
	{
		public int direction { get; set; }
		public int words_result_num { get; set; }
		public IList <string> words_result { get; set; }
	}
}
szydlak napisał(a):

To pokaż jeszcze RecogResultObj jak wygląda

1

No i masz źle. Bo json nie ma listy stringów tylko listę obiektów z polem words typu string

czyli tak ma być:

namespace Hawk_Eye
{
    public class RecogResultObj
    {
        public int direction { get; set; }
        public int words_result_num { get; set; }
        public IList <CosTam> words_result { get; set; }
    }
   public class CosTam
  {
      public string Words {get;set;}
  }
}
0

Teraz jest jeszcze śmieszniej, bo zwraca mi tylko Hawk_Eye.Word Hawk_Eye.Word ITD, w zależności od ilości elementó w liście. > ##### szydlak napisał(a):

No i masz źle. Bo json nie ma listy stringów tylko listę obiektów z polem words typu string

czyli tak ma być:

namespace Hawk_Eye
{
    public class RecogResultObj
    {
        public int direction { get; set; }
        public int words_result_num { get; set; }
        public IList <CosTam> words_result { get; set; }
    }
   public class CosTam
  {
      public string Words {get;set;}
  }
}
0

dobrze byłby gdybyś pokazał dokładnego JSON'a (nie urwanego przy końcu). I kod który deserializuje. Bo tak sobie można powróżyć.

0

Tu jest kod odpowiedzialny za wysłanie, deserializację i wszystko inne:

		public static void RecognizeImageNormal(string PathToFile)
		{
			var Client = new Baidu.Aip.Ocr.Ocr("MojKluczAPI", "MojSekretnyKod");
			Client.Timeout = 60000;
			var options = new Dictionary<string, object> {
			{ "language_type","E													NG"}
			};
			var Image = System.IO.File.ReadAllBytes(PathToFile);
			var RecognitionResult = Client.GeneralBasic(Image, options);
			RecogResultObj OBJ = JsonConvert.DeserializeObject<RecogResultObj>(RecognitionResult.ToString());
						string FinalResult = String.Join(" ", OBJ.words_result);
			MessageBox.Show(FinalResult);
		}
1

Nie możesz zrobić na obiektach words_result String.Join. Bo to są obiekty a nie stringi. Jaki chcesz mieć konćwoy resultat? Wszystkie te zdania oddzielone spacją?

Czyli u Ciebie coś takiego:

string FinalResult = String.Join(" ", OBJj.words_result.select(d=>d.Words).ToList());

.

0

OK, moja logika jakzwykele byłą różnawa od tej ogólnie przyjętej, lol. Dzięki!

2

Są narzędzia (a nawet wbudowane w IDE), które pozwalają na wklejenie jsona jako klasy, czyli od razu wygeneruje Ci gotowe klasy obsługujące tego jsona.

1 użytkowników online, w tym zalogowanych: 0, gości: 1