JsonSerializer, aber wie anwenden

CopWorker

Erfahrenes Mitglied
Hallo zusammen,

wie z.H. kann ich den "JsonSerializer" erfolgreich anwenden.

Ich habe bereits eine Klasse mit den erforderlichen Properities angelegt.

C#:
    public class PickAndDrop
    {
        public int Priority { get; set; }
        public IList<Node> SubTasks { get; set; }

    }


    public class Node
    {
        public string Type { get; set; }
        public string NodeId { get; set; }
    }
Dann möchte ich gerne die Parameter serialisieren.

C#:
JsonSerializer jsSerial = new JsonSerializer();
JsonTextWriter jsWriter = new JsonTextWriter();

PickAndDrop clPidro = new PickAndDrop();
string strJson = jsSerial.Serialize(jsWriter, clPidro);

Leider kann ich nicht nachvollziehen wie ich die Übergabeparameter der Methode .Serialize(jsWriter, clPidro) gestalten soll.
Mit der Doku von Microsoft komme ich nicht klar:
Serialisieren und Deserialisieren von JSON mit C# – .NET

Vielen Dank.
Grüße von CopWorker
 

Spyke

Premium-User
Achtung, das geht laut Dokumentention nur für .Net 5.0 oder .Net Core 3.1
Verwendest du diese .Net Versionen?

Ansonsten könntest du dir alternativ ev. Newtonsoft.Json anschauen.
(Verwenden tu ichs selbst nicht, aber einige Arbeitskollegen)
 

CopWorker

Erfahrenes Mitglied
Hallo Spyke,

aua, das hätte ich merken müssen.
Ich bin erst bei 4.7.2.
Gibt´s die 5er .NET schon?

Grüße von CopWorker
 

CopWorker

Erfahrenes Mitglied
Hallo zusammen,

jetzt habe ich mal was zusammengestellt.

C#:
var formatter = new JsonMediaTypeFormatter();
JsonSerializer jsSerial = new JsonSerializer();
TextWriter teWriter = new StringWriter();
JsonTextWriter jsWriter = new JsonTextWriter(teWriter);

//die Klasse in der die Parameter verwaltet werden
TasksAndStates clTaSta = new TasksAndStates();
clTaSta.SetParameter();

jsSerial.Serialize(jsWriter, clTaSta);

thResult = clHttpClient.PostAsync("Tasks", jsWriter, formatter);

Was z.H. soll der "formatter, und wie gestalte ich den?

Das weitere Problem ist, dass ich das Objekt "jsWriter" nicht funktioniert.
Aber wie kann ich sonst den Klassenvariablen einer Klasse eine Json -String erstellen?

Vielen Dank.
Grüße von CopWorker
 

Spyke

Premium-User
schau dir Newtonsoft.Json an, Microsoft schlägt den hier z.B. selbst vor
JavaScriptSerializer Class (System.Web.Script.Serialization)

Alternativ könntest du es noch mit dem DataContractJsonSerializer probieren
Gewusst wie: Verwenden von DataContractJsonSerializer - WCF
dafür musst du aber dann auch in deiner Klasse entsprechend die Attribute angeben.

aaahhh hab gerade noch das gefunden
Serialisieren und Deserialisieren von JSON mit C# – .NET
über nuget kommst du auch an die System.Text.Json für .Net Framework 4.7.2
 

Spyke

Premium-User
C#:
    public class PickAndDrop
    {
        public int Priority { get; set; }
        public IList<Node> SubTasks { get; set; }

    }


    public class Node
    {
        public string Type { get; set; }
        public string NodeId { get; set; }
    }
Dann möchte ich gerne die Parameter serialisieren.

C#:
JsonSerializer jsSerial = new JsonSerializer();
JsonTextWriter jsWriter = new JsonTextWriter();

PickAndDrop clPidro = new PickAndDrop();
string strJson = jsSerial.Serialize(jsWriter, clPidro);

falls du doch schon über nuget die System.Text.Json geholt hattest, laut deinem Eingangspost sollte es ganz simpel so funktionieren

C#:
string s = JsonSerializer.Serialize(clPidro, typeof(PickAndDrop));
JsonSerializer.Serialize Methode (System.Text.Json)

falls du UTF8 verwenden willst
JsonSerializer.SerializeToUtf8Bytes Methode (System.Text.Json)
und/oder dann doch mittels Utf8JsonWriter
JsonSerializer.Serialize Methode (System.Text.Json)
 
Zuletzt bearbeitet: