# JsonSerializer, aber wie anwenden



## CopWorker (29. April 2021)

Hallo zusammen, 

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

Ich habe bereits eine Klasse mit den erforderlichen Properities angelegt.


```
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.


```
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 (30. April 2021)

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 (30. April 2021)

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


----------



## Spyke (3. Mai 2021)

gibts schon ist aber neuer Core, sprich kannst es nicht eifnach in bestehenden .Net 4 Anwendungen verwenden (glaub ich)
What's new in .NET 5


----------



## CopWorker (3. Mai 2021)

Hallo zusammen, 

jetzt habe ich mal was zusammengestellt.


```
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 (4. Mai 2021)

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 (4. Mai 2021)

CopWorker hat gesagt.:


> ```
> public class PickAndDrop
> {
> public int Priority { get; set; }
> ...



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


```
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)


----------

