Diskuze: JSON deserializovat do objektů
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 31 zpráv z 31.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ten converter by mel mit metodu pro deserializaci, ktera bere jako argument string, nemusis nutne pouzit tu generickou. To by ti mohlo stacit, ne?
A mohl bys to prosím více nastínit?
našel jsem
JsonConvert.DeserializeAnonymousType(string value )
To je ono? Nevím, jak to použít.
Používal jsem doteď jen
JsonConvert.PopulateObject(response.Content, model);
var neco = JsonConvert.DeserializeObject(jsonValue);
a jak budu číst potom hodnoty z var neco?
//zkousel jsem nekolik variant, aktualne mam toto
public List<Models.GetContacts.ContactInfo> GetContactsList()
{
var client = new RestClient(Settings.UrlApi);
var request = new RestRequest("/contacts", Method.GET);
request.AddHeader("authorization", "Basic " + Settings.passwordString);
IRestResponse response = client.Execute(request);
GetContactModel getContact = new GetContactModel();
JsonConvert.PopulateObject(response.Content, getContact);
// getContact = JsonConvert.DeserializeObject(response.Content) as GetContactModel;
GetContact neco = JsonConvert.DeserializeObject<dynamic>(response.Content);
var list = neco.id;
return list;
}
public class GetContactModel
{
public GetContact contacts { get; set; }
public int total { get; set; }
}
public class GetContact
{
public List<ContactInfo> id { get; set; } //tady prostě je vždy id toho kontaktu, které neznám. Vím, že to nefunguje protože tam nemůžu napsat id. Mělo by to kopírovat strukturu.
}
public class ContactInfo
{
public int id { get; set; }
}
Takto to nejde ani zkompilovat
GetContact neco = JsonConvert.DeserializeObject<GetContactModel>(response.Content);
a pokud myslíš takto, tak to stejně nedokáže vytvořit list těch kontaktů
GetContactModelneco = JsonConvert.DeserializeObject<GetContactModel>(response.Content);
ano v ContactInfo musím dopsat i další pole, ovšem pro test to zatím stačí.
Pouzivej to tlacitko "Odpovedet", jinak nechodi notifikace!
[JsonProperty(PropertyName = "FooBar")]
public string Foo { get; set; }
V modelu, ktery slouzi pro serializaci a deserializaci pouzij vyse uvedeny atribut. Tridy maji mit jako nazev podstatne jmeno, tridni promenne a vlastnosti se pisi s prvnim pismenem velkym.
public class ContactModel
{
[JsonProperty(PropertyName = "contacts")]
public List<Contact> Contacts { get; set; }
[JsonProperty(PropertyName = "total")]
public int Total { get; set; }
}
public class Contact
{
[JsonProperty(PropertyName = "id")]
public int Id { get; set; }
// dalsi property
}
Ten "dynamic" dej do pryc a strukturu si udelej dle meho vzoru.
díky. Vím, že se to píše velkým, ale nevěděl jsem, že existuje
[JsonProperty]
Super
věcička
Jenže to neřeší můj aktuální problém
Co je teda tvuj aktualni problem? Udelas si tridy dle jsonu, dle meho vzoru je zanoris, deserializujes dle typu a hotovo.
Tady je ten problém. Mám tam napsané id, jenže ono je tam místo id jen nějaké číslo. V mém JSONU úplně nahoře je to zrovna číslo 1. Ten JsonDeserializer neví, že ta jednička je vlastně id a má to deserializovat právě do toho objektu.
public class GetContact
{
[JsonProperty(PropertyName = "id")]
public List<ContactInfo> Id { get; set; }
}
Asi jsem to vyřešil. Ještě to musím nějak nacpat do listu.
public class GetContactModel
{
[JsonProperty(PropertyName = "contacts")]
public Dictionary<int, ContactInfo> Contact { get; set; }
[JsonProperty(PropertyName = "total")]
public int Total { get; set; }
}
public class ContactInfo
{
[JsonProperty(PropertyName = "id")]
public int Id { get; set; }
[JsonProperty("fields")]
public Fields Fields { get; set; }
}
public class Firstname
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
[JsonProperty("alias")]
public string Alias { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("group")]
public string Group { get; set; }
[JsonProperty("value")]
public string Value { get; set; }
}
public class Fields
{
[JsonProperty("core")]
public Core Core { get; set; }
[JsonProperty("personal")]
public List<object> Personal { get; set; }
[JsonProperty("professional")]
public List<object> Professional { get; set; }
}
public class Core
{
[JsonProperty("title")]
public Firstname Title { get; set; }
[JsonProperty("firstname")]
public Firstname Firstname { get; set; }
}
var neco = JsonConvert.DeserializeObject<GetContactModel>(response.Content);
var contacts = neco.Contact.Values;
V debugu mám krásně v proměnné contacts 30 kontaktů.
Mimochodem chci doporučit https://app.quicktype.io, sice to nedokázalo vygenerovat pro mě funkční kód, ale aby člověk nemusel ručně psát ty vlastnosti objektů
Asi tu knihovnu potom zveřejním jako Open Source. Kam to potom publikovat online?
Nevím, jestli je to schválně, nebo omyl, každopádně to není správná
odpověď.
Git je verzovací systém, může běžet klidně na soukromém serveru
a použit na projekty s uzavřeným kódem.
GitHub/Lab... a pod. jsou servery, co umožňují zveřejnění
takového repozitáře online.
Poprosil bych vás prosím o zkontrolování https://github.com/…sakCZ/Mautic
Co se týče napsaného kódu, jinak funkční to je
Souhlas, ja to psal v rychlosti, tak jsem to tam placnul.
Zobrazeno 31 zpráv z 31.