Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Modelparameter JSON-String in XML konvertieren
mijan001
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

Modelparameter JSON-String in XML konvertieren

beantworten | zitieren | melden

Hallo liebes Forum,

ich erstelle aktuell einen Webservice mit dem ASP.NET Core Web API und habe eine Frage bezüglich der Konvertierung von JSON zu XML und auch von XML zu JSON.
Es sollen Kundendaten über eine Datenbank an das PCI einer Anlage übergeben werden.
Die Datenbank wird nach dem Code First Ansatz erstellt. Dabei soll der Parameter "CustomerOrder" als XML-Datentyp implementiert werden und somit die Auftragsdaten des Kunden in der Datenbank im XML Format vorliegen.

Meine Modelparameter sehen wie folgt aus:


    [Table("WebInterfaceParameter", Schema = "PM")]
    public partial class WebInterfaceParameter
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public long CustomOrderId { get; set; }
        [Column(TypeName="xml")]
        public string CustomerOrder { get; set; }
        public DateTime TimeStamp { get; set; }
        public Enums Plausibility { get; set; }
        public bool Priority { get; set; }
    }

Beim Erstellen eines neuen Auftrags des Kunden (POST) wird der Parameter CustomerOrder jedoch als ein JSON-String übergeben.
Edit: Ich übergebe lediglich die Auftragsdaten weiter und weiß somit nicht wie der JSON-String im Vorhinein aufgebaut ist!

Meine Frage: Wie kann ich den erhaltenen JSON-String in ein XML Format für den Datenbankeintrag konvertieren?

Kann mir bitte irgendjemand Anregungen geben wie ich das am Besten umsetzen kann? Ist das so überhaupt möglich?

Ich denke anhand meiner Fragstellung ist klar, dass das alles noch ziemlich neu für mich ist. Wenn ihr noch Infos benötigt, gebt mir bitte Bescheid.

Gruß
mijan001
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von mijan001 am .
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 2.002
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Müsste CustomerOrder nicht ein eigenes Objekt sein?
Vermutlich wurde es bei der Umwandlung wegen dem String Typ dann einfach 1:1 zu einem String umgewandelt.
Hast du ggf. ein Beispiel, ohne Kundendaten, für den Json String?
Dann lässt sich dies eigentlich erkennen, wenn der Wert für das Feld nicht Quotet ist.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
mijan001
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Hallo T-Virus,

vielen Dank für die schnelle Rückmeldung.

Genau, es wurde einfach 1:1 zu einem String umgewandelt.

Ich habe das Problem jetzt so gelöst, dass ich meinem Service für Post-Requests folgenden Code hinzugefügt habe:


XNode xmlCustomerOrder = JsonConvert.DeserializeXNode(customerOrder, "CustomerOrder");
CustomerOrder = xmlCustomerOrder.ToString()

Dadurch wird der eingegebene Json-String in der Datenbank im XML-Format hinterlegt.
Beispiel:
Postman Request:

customerOrder:{"to": "Tove","from": "Jani","heading": "Reminder","body": "Don't forget me this weekend!"}
priority:true
customOrderId:1111
plausibility:0

Eintrag in der Datenbankspalte "CustomerOrder":

<CustomerOrder>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</CustomerOrder>

Ob das jetzt die sinnvollste Vorgehensweise ist, kann ich leider nicht beurteilen.
Die Frage, die ich mir nun stelle ist, wie ich mit einer Get Anfrage die CustomerOrder wieder als Json-String zurück erhalte?!

Gruß,
mijan001
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 2.002
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Wäre vermutlich sinnvoller, wenn du eine Klasse für CustomerOrdner nach dem Json Format umsetzt.
Dann wird diese in beide Richtungen direkt hin und her gewandelt.
Oder muss das Feld ein String sein, weil es auch in der DB nur ein String ist?
Wäre ungünstig, weil du dann den String zusätzlich hin und her konvertieren müsstest.
Wenn das ganze Objekt als XML gespeichert wird, dann brauchst du eben nur eine CustomerOrdner Klasse mit den richtigen Feldern aufbauen.
Die De-/Serialisierung kümmert sich dann eigentlich um alles.

Nachtrag:
Ja das Feld muss als String gespeichert werden.
Ich würde denoch auf eine eigene Klasse umsetzen.

Damit kannst du dann die Konvertierung von Json -> Objekt -> Xml und umgekehrt über die De-/Serialisierung laufen lassen.
Ist zwar immer ein zusätzlicher Schritt, ist in dem Fall aber wohl nötig.

T-Virus
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
mijan001
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Also in der (SQL) DB ist das Feld CustomerOrder vom Datentyp XML :

 [Column(TypeName="xml")]
    public string CustomerOrder { get; set; }

Warum muss das Feld als String gespeichert werden?

Bei der Umsetzung der Klasse fehlt mir gerade noch die Vorstellungskraft..
Kannst du mir hierfür eine kleines Beispiel aufzeigen?

Gruß
mijan001
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.928

beantworten | zitieren | melden

Vor allem beim Speichern von Datensätzen und Webrequests sollte man DateTimeOffset verwenden, sonst geht die Zeitzone verloren.
[FAQ] DateTime vs. DateTimeOffset und der Umgang mit Zeiten in .NET
private Nachricht | Beiträge des Benutzers
mijan001
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Hi Abt,

danke für den Einwand, das hatte ich gar nicht auf dem Schirm. Werde ich umgehend umsetzen
private Nachricht | Beiträge des Benutzers