我有以下课程:
public class DeviceInfo
{
public string? ip { get; set; }
public string? deviceKey { get; set; }
public long time { get; set; }
public string? version { get; set; }
public int faceCount { get; set; }
public int personCount { get; set; }
}
另一方面,我有这个 json 字符串:
{
"ip": "192.168.0.146",
"deviceKey": "A34CC830D348437A",
"time": "1741375392869",
"version": "1.41.9.7",
"faceCount": "0",
"personCount": "0"
}
执行时:
JsonSerializerOptions? options = customImplementation ? new JsonSerializerOptions
{
TypeInfoResolver = new DefaultJsonTypeInfoResolver
{
Modifiers = { JsonImplementationAttribute.ReadAttributeFromTypeInfo }
}
} : null;
JsonSerializer.Deserialize<DeviceInfo>(json, options);
我收到此错误:
异常:System.Text.Json.JsonException:无法将 JSON 值转换为 System.Int64。路径:$.time | LineNumber:0 | BytePositionInLine:75。---> System.InvalidOperationException:无法将标记类型“String”的值作为数字获取。在 System.Text.Json.ThrowHelper.ThrowInvalidOperationException_ExpectedNumber(JsonTokenType tokenType) 在 System.Text.Json.Utf8JsonReader.TryGetInt64(Int64& value) 在 System.Text.Json.Utf8JsonReader.GetInt64() 在 System.Text.Json.Serialization.Metadata.JsonPropertyInfo
1.ReadJsonAndSetMember(Object obj, ReadStack& state, Utf8JsonReader& reader) at System.Text.Json.Serialization.Converters.ObjectDefaultConverter
1.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value) 在 System.Text.Json.Serialization.JsonConverter1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue) at System.Text.Json.Serialization.JsonConverter
1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) --- 内部异常堆栈跟踪结束 --- 在 System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, Utf8JsonReader& reader,Exception ex)位于 System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan
1 utf8Json,JsonTypeInfo1 jsonTypeInfo, Nullable
1 actualByteCount)
位于 System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan1 json, JsonTypeInfo
1 jsonTypeInfo) 位于 System.Text.Json.JsonSerializer.Deserialize[TValue](String json,JsonSerializerOptions options) 位于 Modules.Integration.Extensions.JsonExtensions.ToObject[T](Object o,Boolean customImplementation) 在 C:\WorkingFolder\Projects\Desytec\Development\Desytec-Security-Platform\Web\Modules\Modules.Integration\Extensions\JsonExtensions.cs:line 29 位于 AdmsServer.Services.PassDeviceService.SaveOptions(String serialNumber) C:\WorkingFolder\Projects\Desytec\Development\Desytec-Security-Platform\Web\Devices\AdmsServer\Services\PassDeviceService.cs:第 237 行,位于 C:\WorkingFolder\Projects\Desytec\Development\Desytec-Security-Platform\Web\Devices\AdmsServer\Controllers\Drivers\API\PassController.cs:第 83 行的 AdmsServer.Controllers.Drivers.API.PassController.Heartbeat(DeviceInfo 设备)
您在这里看到了什么错误?
问候
您可以使用内置功能
JsonSerializerOptions
并设置NumberHandling
属性,因为它默认未设置为将字符串读取为数字,您可以像这样更改它:以下是 DotNet Fiddle 的链接:DotNetFiddle