Laden...

Modelparameter JSON-String in XML konvertieren

Erstellt von mijan001 vor einem Jahr Letzter Beitrag vor einem Jahr 853 Views
M
mijan001 Themenstarter:in
7 Beiträge seit 2022
vor einem Jahr
Modelparameter JSON-String in XML konvertieren

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

T
2.224 Beiträge seit 2008
vor einem Jahr

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.

M
mijan001 Themenstarter:in
7 Beiträge seit 2022
vor einem Jahr

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

T
2.224 Beiträge seit 2008
vor einem Jahr

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

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.

M
mijan001 Themenstarter:in
7 Beiträge seit 2022
vor einem Jahr

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

16.834 Beiträge seit 2008
vor einem Jahr

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

M
mijan001 Themenstarter:in
7 Beiträge seit 2022
vor einem Jahr

Hi Abt,

danke für den Einwand, das hatte ich gar nicht auf dem Schirm. Werde ich umgehend umsetzen 🙂