Datenbereich (Pointer) => json
-
Hallo,
ich nutze eine Funktion " plcdevice.GetCpInfo() an die eine Referenz übergeben wird,
in die die Funtion dann Daten in einem "struct" schreibt.Die Struktur sieht so aus ...
public struct S7CpInfo { public int MaxPduLength; public int MaxConnections; public int MaxMpiRate; public int MaxBusRate; };Jetzt möchte ich die Daten lesen und in ein json wandeln.
Beim Test "Console.WriteLine(jsonString);" kommt nur "{}"S7Client.S7CpInfo CpInfo = new S7Client.S7CpInfo(); result = plcdevice.GetCpInfo(ref CpInfo); string jsonString = JsonSerializer.Serialize(CpInfo); Console.WriteLine(jsonString);Wenn ich im Debugger einen Breakpoint mache und die var "Cpinfo" ansehe, sehe ich die Daten.
Es funktioniert auch nachfolgendes ...Console.WriteLine(CpInfo.MaxBusRate);Eigentlich sollte es funktionieren ... sehe aber den Fehler nicht, warum ich das struct nicht nach json wandeln kann ?
Vielen Dank !!!
-
Hatte mal was Ähnliches, da hat sich die Serialisierung per Reflection nur Properties angeguckt, keine normalen Member.
-
Hallo,
das kann es doch nicht sein ...

Hat keiner eine Idee ... ??
-
@DocShoe hat dir doch schon das Problem dargestellt, also daß standardmäßig
JsonSerializer.Serializenur Eigenschaften (properties) serialisiert und nicht normale Member (fields).Also die Internet-Suche ergibt dann z.B. JSON-Serialisierung: Einschließen von Feldern.
Wenn du die Struktur nicht ändern kannst (S7Clienthört sich nach der Siemens-Library an), dann probierevar options = new JsonSerializerOptions { IncludeFields = true }; string jsonString = JsonSerializer.Serialize(CpInfo, options);
-
Hallo,
vielen Dank, das war es.
@DocShoe : Sorry ... das mit der "Reflection nur Properties" hatte ich anders verstanden.
Leider habe ich dadurch ein 2.Problem gesehen.
Mein json String sieht nachfolgend aus{ "ModuleTypeName" : "CPU 314C-2 PN/DP\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", "SerialNumber" : "S Q-E3U024642014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000", "ASName" : "192.168.10.11_MPI-11\u0000\u0000\u0000\u0000", "Copyright" : "Original Siemens Equipment", "ModuleName" : "CPU 314C-2 PN/DP\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" }Dachte ich mir, kein Problem ...
var options = new JsonSerializerOptions { IncludeFields = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true // Optional: für bessere Lesbarkeit };Interresiert Ihm aber nicht, der json String wird nicht verändert. Wie kann ich den unicode entfernen, ideal wäre direkt beim serialsieren. Ein nachträgliches
jsonString.Replace ("\0", string.Empty);bringt auch nichts.
Vielen Dank !!!