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.Serialize nur 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 (S7Client hört sich nach der Siemens-Library an), dann probiere

    var 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 !!!


Anmelden zum Antworten