TLDR:如果反序列化对象的所有字段都为null,没有任何例外,请检查您的基类是否具有[DataContract]属性,这使Json.net忽略没有[DataMember]的每个属性。
对不起,代码量很大,但我无法缩小导致问题的原因。
我有这个json对象,它具有类AssetViewModel的数组
import random
x = input("Rolar dado? Insira : S/N")
while x == "s":
print("Nº dado:", random.randrange(1,7))
x = input("Rolar dado? Insira : S/N")
else:
break
AssetViewModel:
[{
"id":117,
"name":"BMP",
"creator":null,
"extension":".bmp",
"creationDate":"2019-03-31T23:18:20.8080488Z",
"modificationDate":"2019-03-31T23:18:21.3191844Z",
"size":1440056,
"isDeleted":false,
"version":0,
"hasSinglePreview":true,
"hasCollagePreview":false,
"customPreviews":0,
"group":null,
"collection":null,
"project":null,
"tags":[]
}]
如果我将其反序列化,请参见下文,它工作正常。
public class AssetViewModel : IAsset
{
public int Id { get; set; }
public string Name { get; set; }
public IUser Creator { get; set; }
public string Extension { get; set; }
public DateTime CreationDate { get; set; }
public DateTime ModificationDate { get; set; }
public long Size { get; set; }
public bool IsDeleted { get; set; }
public int Version { get; set; }
public bool HasSinglePreview { get; set; }
public bool HasCollagePreview { get; set; }
public int CustomPreviews { get; set; }
public IGroup Group { get; set; }
public ICollection Collection { get; set; }
public IProject Project { get; set; }
public ICollection<ITag> Tags { get; set; }
}
但是对于AssetViewModel2类却不是:
var result = JsonConvert.DeserializeObject<IEnumerable<AssetViewModel>>(content);
属性是相同的,除了在此类中,它们具有带有NotifyOfPropertyChange()的后备字段以用于WPF绑定。我将其中一些更改为具体类型,因为我认为这可能会引起一些麻烦,但这并没有帮助。
如果使用AssetViewModel2反序列化,则结果的所有属性均保持为空,并且没有任何异常。
在AssetViewModel2中我怎么了?
答案 0 :(得分:1)
你全都错了
例如
"creator":{
已映射到
Creator { get; set; }
[JsonProperty(PropertyName = "FooBar")]
正确地映射它们答案 1 :(得分:0)
问题出在基类。我正在使用caliburn micros PropertyChangedBase。该类具有[DataContract]属性,因此有必要将[DataMember]属性添加到应反序列化的属性中。
解决方案: