JSON 解串器 "loses" JSON 值的最后 属性

JSON Deserializer "loses" last property of JSON value

像这样传递一个 Json 值(这将是代码中的 var json 值):

"{\"Something\":0,\"Something2\":10,\"Something3\":{\"Something4\":17,\"Something5\":38042,\"Something6\":38043,\"Id\":215},\"Something7\":215,\"SomethingId\":42,\"Something8\":\"AString, Gläser\",\"Something8\":\"44-55-18\",\"Status\":{\"Caption\":\"Fixed\",\"Value\":7},\"Type\":\"Article\",\"Id\":97,\"@Delete\":true,\"Something9\":\"8\"}"

到以下代码:

var deserializer = new JsonSerializer();
const string regex = @"/Date\((.*?)\+(.*?)\)/";
var reader = new JsonTextReader(new StringReader(jsonValue));
returnValue = deserializer.Deserialize(reader, type);

type 是 https://dotnetfiddle.net/LMPEl0 的类型(谢谢你 Craig)(抱歉奇怪的名字,不能透露实际的...)

json值由 DataTable 的可编辑单元格中的输入生成,显然将以前的空值放在 json 字符串的末尾。

我在 "Something9" 属性 的 returnValue 中得到一个空值,而不是 8(Something9 之前是空的,通过 DataTable 的可编辑单元格设置为 8) 我看不到的 Json 值有问题吗? 或者我需要在解串器中进行一些设置吗?

谢谢

你没有显示你的类型,所以我使用 http://json2csharp.com.

生成了一个
public class Something3
{
    public int Something4 { get; set; }
    public int Something5 { get; set; }
    public int Something6 { get; set; }
    public int Id { get; set; }
}

public class Status
{
    public string Caption { get; set; }
    public int Value { get; set; }
}

public class RootObject
{
    public int Something { get; set; }
    public int Something2 { get; set; }
    public Something3 Something3 { get; set; }
    public int Something7 { get; set; }
    public int SomethingId { get; set; }
    public string Something8 { get; set; }
    public Status Status { get; set; }
    public string Type { get; set; }
    public int Id { get; set; }
    [JsonProperty("@Delete")]
    public bool Delete { get; set; }
    public string Something9 { get; set; }
}

因为您的一个属性的名称作为 .NET 无效 属性 我向该属性添加了 [JsonProperty] 属性。在那之后它完美地工作了。也许问题在于您如何在 .NET 类型中声明 @Delete JSON 属性。鉴于 Something9 在 之后 而 属性 我猜这是问题的一部分。

这是 fiddle。

https://dotnetfiddle.net/McZF9Q

虽然 Craig 的回答很有帮助并最终找到了解决方案,但问题的确切答案如下:

Status 对象是一个枚举对象,未正确反序列化。 因此,Json 字符串中的任何内容也未反序列化。

实现自定义枚举解串器是解决方案。 Whosebug 中还有其他问题对此有所帮助,尤其是这里的这个问题: How can I ignore unknown enum values during json deserialization?

谢谢大家:)