- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们已将 Newtonsoft.Json 从 10.0.3 升级到 11.0.1,之前可以运行的代码不再运行。
我们有以下 JSON:
[{"mail-type":"registration","response":"250 OK id=1UjnNr-gdf-C0 ","invoice-id":,"email":"testuser08@test.com"}]
然后我们调用下面的方法:
var events = JsonConvert.DeserializeObject<Event[]>(jsonEvents);
这在 10.0.3 上运行良好,但在 11.0.1 上不起作用。在此版本上抛出以下异常:
Exception thrown: 'Newtonsoft.Json.JsonReaderException' in Newtonsoft.Json.dll
Additional information: An undefined token is not a valid System.Nullable`1[System.Int64]. Path '[0].invoice-id', line 1.
我尝试将以下选项传递给 DeserializeObject
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
};
但是还是一样的错误。必须进行哪些更改才能使其在 11.0.1 上运行。我担心我们无法容纳来自第三方 API 的 JSON 输出。
最佳答案
您的 JSON 样本格式不正确。如果我将你的 JSON 上传到 https://jsonlint.com/然后生成以下错误:
Error: Parse error on line 4:
...0 ", "invoice-id": , "email": "testuse
----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got ','
有问题的行如下:
"invoice-id": ,
根据JSON standard :
和 ,
之间需要有一个值。但是,为什么这在 Json.NET 10.0 中有效?显然这是一个错误,已修复。根据11.0.1 release notes :
Fix - Fixed not erroring when reading undefined for nullable long
因此,如果我们假设您的 Event
类型如下所示:
public partial class Event
{
[JsonProperty("invoice-id")]
public long? InvoiceId { get; set; }
// Other properties as required
}
然后在 10.0 中,您的 JSON 可以使用此类型成功反序列化,但在 11.0 中则不能。但是,如果我们将 InvoiceId
更改为 int?
:
public partial class Event
{
[JsonProperty("invoice-id")]
public int? InvoiceId { get; set; }
// Other properties as required
}
两个版本都失败了。因此,修复似乎一直在处理 int?
和 long?
。
理想情况下,您应该要求向您发送此类 JSON 的人对其进行修复,使其符合 http://www.json.org/ 所定义的格式。和 RFC 8259 .如果您仍然需要以与 Json.NET 10.0 相同的方式解析此类 JSON,则可以引入 TolerantNullableLongConverter
,如下所示:
public class TolerantNullableLongConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(long?);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
return null;
if (reader.TokenType == JsonToken.Undefined)
return null;
if (reader.Value is long)
return reader.Value;
// string or int or decimal or ...
return serializer.Deserialize<long>(reader);
}
public override bool CanWrite { get { return false; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
并将其应用于您的类型,如下所示:
public partial class Event
{
[JsonProperty("invoice-id")]
[JsonConverter(typeof(TolerantNullableLongConverter))]
public long? InvoiceId { get; set; }
// Other properties as required
}
关于c# - Newtonsoft.Json v11 - DeserializeObject 抛出 JsonReaderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49045501/
我在部署的系统上收到以下错误: See the end of this message for details on invoking just-in-time (JIT) debugging ins
我有一个使用 Angular 和 C# 的网络项目。 在 C# Controller 中,我想读取用于测试的本地 json 文件的内容。 这是我运行的代码,用于从我的工作目录中读取 JSON。 str
我有这段代码来尝试打开一个 .json 文件并读取它: [Route("{unit}/{begindate}")] public string Get(string unit, string begi
主程序中的代码 controller.modelToFile("passwords/test.json"); controller.deJSONizeModel("passwords/test.jso
我在 header 中请求 gZip 响应,例如: request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip"); 在 webrespon
我在全息镜头上部署时遇到异常。我不知道为什么或如何解决它。它发生在下面的类中。 class JsonConverter { public Dictionary convertJsonToObj
上下文 - 我们的代码 我们在重定向 API Http GET 调用时遇到错误。我在 stackoverflow 上搜索了类似的问题,但它似乎不像我们的问题。 我们有一个简单的场景。我们的解决方案是作
我遵循了那里的教程,并且想出了这个...... 它是一种设备注册方法,使用 Microsoft.WindowsAzure.MobileServices.MobileServiceClient.Regi
正在尝试连接 JOliver's EventStore与 RavenDB并遇到障碍。我在 Raven 中创建了一个名为 RavenEventStore 的新数据库。 以下是我的线路; return W
我正在尝试制作一个 discord 机器人,但我在连接到 discord API 时遇到问题。我正在使用 visual studio community 2019。我使用 .net 核心控制台应用程序
我正在尝试用 C# 编写 AWS Lambda 函数。我有 AWS Toolkit for Visual Studio 2015。我使用 AWS Lambda 项目 (.Net Core) 创建了一个
反序列化命令时,我们遇到随机异常。我们有一个仅发送 API,可将消息放入队列中。尝试使用消息但失败。无论消息类型如何,它都会随机发生。有时后端可以反序列化消息。我们将 NServiceBus 设置为使
我正在尝试将一些日期插入到我的本地数据库中。我收到一个错误: {Newtonsoft.Json.JsonReaderException: Could not convert string to Dat
反序列化命令时,我们遇到随机异常。我们有一个仅发送 API,可将消息放入队列中。尝试使用消息但失败。无论消息类型如何,它都会随机发生。有时后端可以反序列化消息。我们将 NServiceBus 设置为使
我正在尝试将一些日期插入到我的本地数据库中。我收到一个错误: {Newtonsoft.Json.JsonReaderException: Could not convert string to Dat
我们已将 Newtonsoft.Json 从 10.0.3 升级到 11.0.1,之前可以运行的代码不再运行。 我们有以下 JSON: [{"mail-type":"registration","re
我在解析包含 JSON 的字符串时收到此异常: Newtonsoft.Json.JsonReaderException: Unterminated string. Expected delimiter
您好,我正在尝试从移动后端调用 lambda 函数。 我使用.Net Core生成了Lambda函数 public string FunctionHandler(string text,
我有以下字符串。我收到以下错误。你能告诉我哪里出了问题吗? Unexpected character encountered while parsing value: C. Path '', line
我正在运行下面的代码来故意抛出 JsonReaderException。它正确地给出了“无法将字符串转换为 bool 值:aaa。路径‘事件’,第 3 行,位置 17”的异常消息。 有什么方法可以直接
我是一名优秀的程序员,十分优秀!