JsonException beim Deserialisieren einer bestimmten Klasse
Posted: 15 Jan 2025, 15:47
Ich erhalte eine JsonException in meinem Client, wenn er versucht, die Zeichenfolge zu deserialisieren. Nachdem ich mit der API herumgespielt habe, habe ich festgestellt, dass ein bestimmter Abschnitt fehlerhaft ist, da die anderen Teile davon ordnungsgemäß deserialisiert wurden und den Fehler nicht anzeigen.
In der API Es gibt eine Klasse, die mindestens zwei IDs für andere Klassen und möglicherweise eine dritte ID für eine andere Klasse sowie ihre eigene ID enthält. Es enthält auch einige Attribute, die auf der Clientseite verwendet werden.
Der Fehler, den ich erhalte, ist der folgende:
JsonException: Der JSON-Wert konnte nicht in UILibrary.Api.AppRoleId konvertiert werden. Pfad: $.appPermissionsSaved[0].appRoleId | Zeilennummer: 0 | BytePositionInLine: 25761.
System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
ApiException: Der Antworttext-Stream konnte nicht als UILibrary deserialisiert werden .Api.UserInformationRequestResponse.
JsonException: Der JSON-Wert konnte nicht konvertiert werden zu UILibrary.Api.AppRoleId. Pfad: $.appPermissionsSaved[0].appRoleId | Zeilennummer: 0 | BytePositionInLine: 25761.
UILibrary.Api.UserinfoClient.ReadObjectResponseAsync(HttpResponseMessage-Antwort, IReadOnlyDictionary-Header, CancellationToken cancellingToken) in ApiClient.cs
+
var typedBody = warten System.Text.Json.JsonSerializer.DeserializeAsync(responseStream, JsonSerializerSettings, cancelToken).ConfigureAwait(false);
Ich stelle ein Beispiel für den JSON zur Verfügung der API-Endpunkt bereitstellt und was vom OpenAPI-Schema kommt.
Schema (nicht benötigte Abschnitte der Kürze halber entfernt, und ja, es ist immer noch lang):
Json-String:
Ich weiß, dass die Möglichkeit besteht, dass es, wenn es beim ersten Mal fehlschlägt, auch bei einer der anderen beiden potenziellen IDs fehlschlagen könnte. Was ich suche, ist eine Möglichkeit, das aktuelle Problem zu beheben und das mögliche Auftreten anderer Probleme zu verhindern.
Eines der Dinge, die ich versucht habe, war die Verwendung eines AppPermissionsSaved Für die Liste habe ich eine Objektliste erstellt. In diesem Fall ist es nicht fehlgeschlagen, aber ich konnte das Objekt im Client nicht wieder in ein AppPermissionsSaved konvertieren. Entweder ist dies wie oben beschrieben fehlgeschlagen, als ich JsonSerializer.Deserialize(jsonString); ausgeführt habe, oder es wurde einfach irgendwie komplett übersprungen.
Wie bereits erwähnt, habe ich AppPermissionsSaved entfernt bei der Fehlerbehebung und es ist kein Fehler mit dem Deserialisierer aufgetreten, nachdem das OpenApi-Schema entsprechend aktualisiert wurde und nur die Ansprüche, Approle, Apppermissions und vorhanden waren Fehlerbeschreibung. Das funktionierte perfekt und ich konnte weitermachen. Obwohl in AppPermissionsSaved benötigte Informationen vorhanden sind, muss ich diese wieder einfügen.
Vielen Dank im Voraus.
Bearbeiten: Nach einigen weiteren Tests verwende ich stark typisierte IDs und der Deserializer schlägt bei allen stark typisierten IDs fehl.
In der API Es gibt eine Klasse, die mindestens zwei IDs für andere Klassen und möglicherweise eine dritte ID für eine andere Klasse sowie ihre eigene ID enthält. Es enthält auch einige Attribute, die auf der Clientseite verwendet werden.
Der Fehler, den ich erhalte, ist der folgende:
JsonException: Der JSON-Wert konnte nicht in UILibrary.Api.AppRoleId konvertiert werden. Pfad: $.appPermissionsSaved[0].appRoleId | Zeilennummer: 0 | BytePositionInLine: 25761.
System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
ApiException: Der Antworttext-Stream konnte nicht als UILibrary deserialisiert werden .Api.UserInformationRequestResponse.
JsonException: Der JSON-Wert konnte nicht konvertiert werden zu UILibrary.Api.AppRoleId. Pfad: $.appPermissionsSaved[0].appRoleId | Zeilennummer: 0 | BytePositionInLine: 25761.
UILibrary.Api.UserinfoClient.ReadObjectResponseAsync(HttpResponseMessage-Antwort, IReadOnlyDictionary-Header, CancellationToken cancellingToken) in ApiClient.cs
+
var typedBody = warten System.Text.Json.JsonSerializer.DeserializeAsync(responseStream, JsonSerializerSettings, cancelToken).ConfigureAwait(false);
Ich stelle ein Beispiel für den JSON zur Verfügung der API-Endpunkt bereitstellt und was vom OpenAPI-Schema kommt.
Schema (nicht benötigte Abschnitte der Kürze halber entfernt, und ja, es ist immer noch lang):
Code: Select all
{
"openapi": "3.0.1",
"info": {
"version": "1.0"
},
"paths": {
"/api/Userinfo": {
"get": {
"tags": [
"Userinfo"
],
"summary": "Retrieves information about the user from the database",
"operationId": "Userinfo",
"responses": {
"401": {
"description": "If the user did not login correctly",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"200": {
"description": "Returns the claims, permissions, roles, and permissions saved",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserInformationRequestResponse"
}
}
}
}
}
}
},
"/api/UserinfoVerify": {
"get": {
"tags": [
"UserinfoVerify"
],
"summary": "Retrieves information about the user from the database",
"operationId": "UserinfoVerify",
"responses": {
"401": {
"description": "If the user did not login correctly",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"200": {
"description": "Returns the claims, permissions, roles, and permissions saved",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserInformationRequestResponse"
}
}
}
}
}
}
},
//Removed
},
"components": {
"schemas": {
"AppPermission": {
"type": "object",
"properties": {
"id": {
"$ref": "#/components/schemas/GuidAggregateRootId"
},
"created": {
"type": "string",
"format": "date-time"
},
"createdBy": {
"type": "string",
"nullable": true
},
"lastModified": {
"type": "string",
"format": "date-time",
"nullable": true
},
"lastModifiedBy": {
"type": "string",
"nullable": true
},
"uniqueName": {
"type": "string",
"nullable": true,
"readOnly": true
},
"nodes": {
"$ref": "#/components/schemas/NodeValues"
},
"nodeType": {
"type": "string",
"nullable": true,
"readOnly": true
},
"permissionName": {
"type": "string",
"nullable": true,
"readOnly": true
},
"description": {
"type": "string",
"nullable": true,
"readOnly": true
},
"itemType": {
"type": "string",
"nullable": true,
"readOnly": true
},
"application": {
"type": "boolean",
"readOnly": true
}
},
"additionalProperties": false
},
"AppPermissionId": {
"type": "object",
"properties": {
"value": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
},
"AppPermissionSavedId": {
"type": "object",
"properties": {
"value": {
"type": "integer",
"format": "int32"
}
},
"additionalProperties": false
},
"AppPermissionsSaved": {
"type": "object",
"properties": {
"id": {
"$ref": "#/components/schemas/AppPermissionSavedId"
},
"appRoleId": {
"$ref": "#/components/schemas/AppRoleId"
},
"appPermissionId": {
"$ref": "#/components/schemas/AppPermissionId"
},
"settingValue": {
"type": "string",
"nullable": true,
"readOnly": true
},
"attribute": {
"type": "string",
"nullable": true,
"readOnly": true
},
"application": {
"type": "boolean",
"readOnly": true
},
"itemName": {
"type": "string",
"nullable": true,
"readOnly": true
},
"applicationId": {
"$ref": "#/components/schemas/ClientApplicationId"
}
},
"additionalProperties": false
},
"AppRole": {
"type": "object",
"properties": {
"id": {
"$ref": "#/components/schemas/GuidAggregateRootId"
},
"roleName": {
"type": "string",
"nullable": true,
"readOnly": true
},
"active": {
"type": "boolean",
"readOnly": true
},
"concurrencyStamp": {
"type": "string",
"nullable": true,
"readOnly": true
},
"permissions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AppPermissionsSaved"
},
"nullable": true,
"readOnly": true
}
},
"additionalProperties": false
},
"AppRoleId": {
"type": "object",
"properties": {
"value": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
},
"Claim": {
"type": "object",
"properties": {
"issuer": {
"type": "string",
"nullable": true,
"readOnly": true
},
"originalIssuer": {
"type": "string",
"nullable": true,
"readOnly": true
},
"properties": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"nullable": true,
"readOnly": true
},
"subject": {
"$ref": "#/components/schemas/ClaimsIdentity"
},
"type": {
"type": "string",
"nullable": true,
"readOnly": true
},
"value": {
"type": "string",
"nullable": true,
"readOnly": true
},
"valueType": {
"type": "string",
"nullable": true,
"readOnly": true
}
},
"additionalProperties": false
},
"ClientApplication": {
"type": "object",
"properties": {
"id": {
"$ref": "#/components/schemas/GuidAggregateRootId"
},
"domainEvents": {
"type": "array",
"items": {
"$ref": "#/components/schemas/IDomainEvent"
},
"nullable": true,
"readOnly": true
},
"clientID": {
"type": "string",
"nullable": true,
"readOnly": true
},
"clientSecret": {
"type": "string",
"nullable": true,
"readOnly": true
},
"consentType": {
"type": "string",
"nullable": true,
"readOnly": true
},
"displayName": {
"type": "string",
"nullable": true,
"readOnly": true
},
"displayNames": {
"uniqueItems": true,
"type": "array",
"items": {
"type": "string"
},
"nullable": true,
"readOnly": true
},
"postLogoutRedirectUris": {
"uniqueItems": true,
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"nullable": true,
"readOnly": true
},
"redirectUris": {
"uniqueItems": true,
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"nullable": true,
"readOnly": true
},
"permissions": {
"uniqueItems": true,
"type": "array",
"items": {
"type": "string"
},
"nullable": true,
"readOnly": true
},
"requirements": {
"uniqueItems": true,
"type": "array",
"items": {
"type": "string"
},
"nullable": true,
"readOnly": true
},
"clientType": {
"type": "string",
"nullable": true,
"readOnly": true
},
"applicationType": {
"type": "string",
"nullable": true,
"readOnly": true
},
"jsonWebKeySet": {
"$ref": "#/components/schemas/JsonWebKeySet"
},
"settings": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"nullable": true,
"readOnly": true
}
},
"additionalProperties": false
},
"ClientApplicationId": {
"type": "object",
"properties": {
"value": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
},
"GuidAggregateRootId": {
"type": "object",
"properties": {
"value": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
},
"Int32AggregateRootId": {
"type": "object",
"properties": {
"value": {
"type": "integer",
"format": "int32"
}
},
"additionalProperties": false
},
"NodeValues": {
"type": "object",
"properties": {
"nodeOne": {
"type": "string",
"nullable": true
},
"nodeTwo": {
"type": "string",
"nullable": true
},
"nodeThree": {
"type": "string",
"nullable": true
},
"nodeFour": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"UserInformationRequestResponse": {
"type": "object",
"properties": {
"claims": {
"type": "object",
"additionalProperties": {},
"nullable": true
},
"appRoles": {
"uniqueItems": true,
"type": "array",
"items": {
"$ref": "#/components/schemas/AppRole"
},
"nullable": true
},
"appPermissions": {
"uniqueItems": true,
"type": "array",
"items": {
"$ref": "#/components/schemas/AppPermission"
},
"nullable": true
},
"appPermissionsSaved": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AppPermissionsSaved"
},
"nullable": true
},
"errorDescription": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
}
},
"securitySchemes": {
}
},
"security": [
{
"Bearer": []
}
]
}
Code: Select all
{
"claims": {
"sub": "d5b321da-6b4d-4e06-9feb-81e898119ccc",
"email": "test@test.com",
"email_verified": true,
"role": [
{
"roleName": "Secure",
"active": true,
"id": {
"value": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c"
}
}
]
},
"appRoles": [
{
"roleName": "Secure",
"active": true,
"concurrencyStamp": "174351b9-dd3b-4eb1-a5f0-8d7887b7cff4",
"permissions": [],
"id": {
"value": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c"
}
}
],
"appPermissions": [
{
"uniqueName": "Navigation_Roles_ViewRolesManagement",
"nodes": {
"nodeOne": "Navigation",
"nodeTwo": "Roles",
"nodeThree": "",
"nodeFour": ""
},
"nodeType": "-ClientApplication-",
"permissionName": "View Roles Management",
"description": "Allows an Authorized User to access Role Management functions",
"itemType": "Client, IsAuthorized",
"application": true,
"id": {
"value": "ae51ab14-4521-4b91-95b8-07d8e626b67b"
},
"created": "0001-01-01T00:00:00",
"createdBy": null,
"lastModified": null,
"lastModifiedBy": null,
"domainEvents": [
{}
]
},
{
"uniqueName": "Edit_User_Applications",
"nodes": {
"nodeOne": "Edit",
"nodeTwo": "User",
"nodeThree": "Applications",
"nodeFour": ""
},
"nodeType": "-ClientApplication-",
"permissionName": "Update User Databases By Id",
"description": "Allows user to update the list of applications for a specific user",
"itemType": "Client, Api",
"application": true,
"id": {
"value": "3392d517-1265-498a-b441-0817d2a28994"
},
"created": "0001-01-01T00:00:00",
"createdBy": null,
"lastModified": null,
"lastModifiedBy": null,
"domainEvents": [
{}
]
},
{
"uniqueName": "Manage_Permissions",
"nodes": {
"nodeOne": "Manage",
"nodeTwo": "Permissions",
"nodeThree": "",
"nodeFour": ""
},
"nodeType": "-Main-",
"permissionName": "Permissions Management",
"description": "Allows users the ability to access the Permissions Controller",
"itemType": "Api",
"application": false,
"id": {
"value": "a24d6e4e-6824-49ac-9bf3-e00193953ad5"
},
"created": "0001-01-01T00:00:00",
"createdBy": null,
"lastModified": null,
"lastModifiedBy": null,
"domainEvents": [
{}
]
},
{
"uniqueName": "Manage_Users",
"nodes": {
"nodeOne": "Manage",
"nodeTwo": "Users",
"nodeThree": "",
"nodeFour": ""
},
"nodeType": "-Main-",
"permissionName": "User Management",
"description": "Allows users the ability to access the Users Controller",
"itemType": "Api",
"application": false,
"id": {
"value": "5769a54e-7e92-4ea4-ace3-f9f60901e865"
},
"created": "0001-01-01T00:00:00",
"createdBy": null,
"lastModified": null,
"lastModifiedBy": null,
"domainEvents": [
{}
]
}
],
"appPermissionsSaved": [
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "ae51ab14-4521-4b91-95b8-07d8e626b67b",
"settingValue": "true",
"attribute": "IsApproved, IsAuthorized",
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 1,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "3392d517-1265-498a-b441-0817d2a28994",
"settingValue": "true",
"attribute": null,
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 2,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "d3b32e20-ab88-4da3-bea0-0a9fae3045dc",
"settingValue": "true",
"attribute": null,
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 3,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "036d8095-4c2d-4273-8466-15dd84b66b48",
"settingValue": "true",
"attribute": null,
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 4,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "49da4b4b-a2ff-463d-86ed-346363d6f9ef",
"settingValue": "true",
"attribute": "IsApproved, IsAuthorized, IsDomainTypeUser",
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 14,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "3feeeafd-56af-4781-9d86-3553a583ff9c",
"settingValue": "true",
"attribute": "IsApproved, IsAuthorized",
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 15,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "f0715bc3-95b0-4fbc-898e-68cedd0ff839",
"settingValue": "true",
"attribute": "IsApproved, IsAuthorized",
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 22,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "a11722c4-3853-4635-9dae-69329a1a7698",
"settingValue": "true",
"attribute": "IsApproved, IsAuthorized",
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 23,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "02984b5a-84c5-4b1c-86f4-71f1fa5e816b",
"settingValue": "true",
"attribute": "IsAuthenticated",
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 24,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "e36703d2-7c6c-42ff-8d80-fe0627a1ed63",
"settingValue": "true",
"attribute": null,
"application": true,
"itemName": "app-man",
"applicationId": "1d4603a9-19b1-440a-9c03-7488629c96bd",
"id": 43,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "b031eb0c-554c-45d4-8cf2-6b0eec1fac04",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 1,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "bed2ee5b-9b6f-4e99-a69e-7abff10112fa",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 2,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "355d769e-9407-4de1-b54f-82221b60ab7e",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 3,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "620e2537-2d58-4c59-aaaf-9c5cec8815aa",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 4,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "24e30568-badd-440f-b121-b4170efab9d1",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 5,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "ef8e7d75-8898-4740-b9bd-c843e78aae23",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 6,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "088883ca-3c72-47e6-9d18-d802931e3b3f",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 7,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "28e93707-e48d-4a74-9a69-d8eb46601856",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 8,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "a24d6e4e-6824-49ac-9bf3-e00193953ad5",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 9,
"domainEvents": []
},
{
"appRoleId": "37c0348a-df35-4a8b-b9b9-7ba7d369ba6c",
"appPermissionId": "5769a54e-7e92-4ea4-ace3-f9f60901e865",
"settingValue": "true",
"attribute": null,
"application": false,
"itemName": null,
"applicationId": null,
"id": 10,
"domainEvents": []
}
],
"errorDescription": null
}
Eines der Dinge, die ich versucht habe, war die Verwendung eines AppPermissionsSaved Für die Liste habe ich eine Objektliste erstellt. In diesem Fall ist es nicht fehlgeschlagen, aber ich konnte das Objekt im Client nicht wieder in ein AppPermissionsSaved konvertieren. Entweder ist dies wie oben beschrieben fehlgeschlagen, als ich JsonSerializer.Deserialize(jsonString); ausgeführt habe, oder es wurde einfach irgendwie komplett übersprungen.
Wie bereits erwähnt, habe ich AppPermissionsSaved entfernt bei der Fehlerbehebung und es ist kein Fehler mit dem Deserialisierer aufgetreten, nachdem das OpenApi-Schema entsprechend aktualisiert wurde und nur die Ansprüche, Approle, Apppermissions und vorhanden waren Fehlerbeschreibung. Das funktionierte perfekt und ich konnte weitermachen. Obwohl in AppPermissionsSaved benötigte Informationen vorhanden sind, muss ich diese wieder einfügen.
Vielen Dank im Voraus.
Bearbeiten: Nach einigen weiteren Tests verwende ich stark typisierte IDs und der Deserializer schlägt bei allen stark typisierten IDs fehl.