Grąžinkite „Json“ objektą naudodami pasikartojančius klavišus naudojant „C #“

WEB API naudojasi prašymu iš programos kliento išsaugoti kontaktinę informaciją, ir turiu siųsti klaidos pranešimą tik tuo atveju, jei duomenys turi klaidą, kitaip nieko TODO

Ankstyvasis žodynas

Pavyzdžiui:

 Dictionary<string, string> error = new Dictionary<string, string> { {"SaveContactMethod_1", "FirstName Invalid"}, {"SaveContactMethod_2", "LastName Invalid"}, {"SaveContactMethod_3", "MiddleName Invalid"}, } 

atitinkamas JSON objektas

 { "error" : { "SaveContactMethod_1":"FirstName Invalid", "SaveContactMethod_2":"LastName Invalid", "SaveContactMethod_3":"MiddleName Invalid" } } 

Bet man reikia UNIQUE rakto (t. Y. Pasikartojančio rakto), todėl List<KeyValuePair<string, string>> Dictionary<string, string> į List<KeyValuePair<string, string>>

 List<KeyValuePair<string, string>> error = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("SaveContactMethod", "FirstName Invalid"), new KeyValuePair<string, string>("SaveContactMethod", "LastName Invalid"), new KeyValuePair<string, string>("SaveContactMethod", "MiddleName Invalid"), } 

atitinkamas JSON objektas

 { "error" : [ { "key":"SaveContactMethod", "value":"FirstName Invalid" }, { "key":"SaveContactMethod", "value":"LastName Invalid" }, { "key":"SaveContactMethod", "value":"MiddleName Invalid" } ] } 

Mano reikalavimai : turiu pridėti dvigubą raktą, ir man reikia žodžio „Json Output“. Prašome man padėti.

Laukiamas rezultatas: JSON

 { "error" : { "SaveContactMethod":"FirstName Invalid", "SaveContactMethod":"LastName Invalid", "SaveContactMethod":"MiddleName Invalid" } } 

Nurodytas JSON yra tinkamas formatas:

Internetinio įrankio numeris 1: https://jsonformatter.curiousconcept.com/

2019

22 февр. B.Balamanigandano vasario 22 d 2017-02-22 09:52 '17 at 9:52 2017-02-22 09:52
@ 2 atsakymai

Ne , tai neįmanoma.

Tai neteisinga * JSON:

 { "error" : { "SaveContactMethod":"FirstName Invalid", "SaveContactMethod":"LastName Invalid", "SaveContactMethod":"MiddleName Invalid" } } 

Čia galite patikrinti:

 Warning:Duplicate key, names should be unique.[Code 23, Structure 9] Warning:Duplicate key, names should be unique.[Code 23, Structure 13] 

* Priklausomai nuo to, ką vadinate galiojančiu

Jei tikrai norite sekti šį maršrutą, pagal RFC 4627 galite naudoti StringBuilder klasę.


Kadangi neatrodo, kad suprantate, kad, priklausomai nuo to, ką vadinate galiojančiu.

ECMA-262:

Tuo atveju, kai objektas turi dvigubas pavadinimų eilutes, turi būti perrašytos to paties rakto leksikinės reikšmės.

Tai reiškia: jei gaunate tris „ SaveContactMethod “, jums reikia "MiddleName Invalid" tik „ECMA Script“ (JS). Su C # serializacija tai būtų neįmanoma. Jums reikia parašyti savo „JsonSerializer“.

92
22 февр. Atsakymą pateikė Christian Gollhardt , vasario 22 d. 2017-02-22 10:00 '17 bent 10:00 2017-02-22 10:00

Jūs turite klasikinę „XY“ problemą. Jūs paklausėte: "Kaip padaryti X", bet jums tikrai reikia padaryti Y, ir manote, kad X yra vienintelis būdas patekti į Y, bet X yra neįmanoma arba labai sunku. Jei šiek tiek pakeisite savo reikalavimus, galite gauti Y kitaip, bet jūs to dar nematėte, nes esate užstrigę X.

Čia yra jūsų X formatas: JSON, kurį norite gauti:

 { "error" : { "SaveContactMethod":"FirstName Invalid", "SaveContactMethod":"LastName Invalid", "SaveContactMethod":"MiddleName Invalid" } } 

Tai, kaip kiti sako, išmeta visus klaidų pranešimus, išskyrus vieną, kai įkeliate jį į C # kodą.

Tačiau yra labai paprastas būdas gauti visus klaidų pranešimus. Jums reikia tiesiog pakeisti JSON, kurį tikitės atrodyti panašiai, o ne:

border=0
 { "error" : { "SaveContactMethod": [ "FirstName Invalid", "LastName Invalid", "MiddleName Invalid" ] } } 

Jei turite tik vieną klaidos pranešimą, vis tiek turėtumėte naudoti šį sąrašą:

 { "error" : { "SaveContactMethod": [ "FirstName Invalid" ] } } 

Taigi, kai įkeliate JSON į savo C # kodą, jis visada bus tokio pat tipo, Dictionary<string,List<string>> , ar buvo viena klaida ar daug.

Tai yra jūsų XY problemoje. Vietoj to, kad pataikytumėte galvą prie sienos "Aš noriu turėti pasikartojančius raktus JSON", suraskite kelią aplink sieną: naudokite vieną raktą su vertybių sąrašu. Ir dabar jūs galite padaryti tai, ko iš tikrųjų reikia, kad gautumėte visus klaidos pranešimus iš savo formos tik su vienu raktiniu pavadinimu kiekvienam atskiram klaidos pranešimui.

81
23 февр. atsakymas pateikiamas rmunn 23 vas . 2017-02-23 12:37 '17, 12:37 2017-02-23 12:37

Kiti klausimai apie „ žymes arba Užduoti klausimą