【发布时间】:2018-02-06 13:27:03
【问题描述】:
我正在尝试使用 Json.net 序列化一些第三方 json,但问题是他们开始将 Id 作为 Guid 的字符串发送。所以我试图忽略序列化中的 Id,但嵌套属性中似乎存在 JsonIgnore 不起作用的问题。出于这个原因,我决定在之后添加我自己的 Id,但序列化本身似乎并没有忽略我的需要。
我用于序列化的类:
public class ItemA: General.Common
{
[JsonIgnore]
public new Guid Id { get; set; } //hiding Guid Id Common
public Folder ParentFolder { get; set; }
//...
}
public class Folder
{
public string Id { get; set; }
public string Path { get; set; }
}
public class ItemB: NotImportant
{
//...
public List<Folder> Folders { get; set; } = new List<Folder>();
public List<ItemA> ItemAs{ get; set; } = new List<ItemA>();
}
我的代码:
var jsonSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
string json = "some Json-that includes some Ids as strings";
dynamic d = JsonConvert.DeserializeObject<ItemB>(json, jsonSettings);
//serialization error here that cannot convert string to Guid in ItemAs
((ItemB)d).ItemAs.ForEach(x => x.Id = new Guid());
编辑: 错误是这样的:
Error converting value "RgAAAAAD01CCe0GCRpDdKTQq2OCQBwAIuTruAfDrRZi9RPZnww3OAAAAAAEMAAAIuTruAfDrRZi9RPZnww3OAABE1hqaAAAA" to type 'System.Guid'...
【问题讨论】:
-
JsonIgnore跳过序列化,而不是反序列化。 -
Json 中的所有内容是否都表示为字符串,包括 GUID
-
@VidmantasBlazevicius 是的,但不是每个字符串都可以反序列化为 guid
-
我认为这是类型转换错误,而不是序列化错误。将
new Guid()更改为new Guid().ToString() -
new Guid() 生成一个“空的”全 0 guid (00000000-0000-0000-0000-000000000000 ),其中 Guid.NewGuid() 生成一个具有唯一值的实际 guid