Json.Net序列化对象丢失其Id值

时间:2011-09-15 09:45:49

标签: c# json json.net

我正在使用Json.Net来序列化和反序列化一个对象。

我遇到的问题是反序列化对象recordPosted的Id为零。

序列化记录将包含Id为180

JsonSerializerSettings jsSettings = new JsonSerializerSettings();
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

var recordAsJson = JsonConvert.SerializeObject(recordToUpdate, 
                                Formatting.None, jsSettings);
//recordAsJson = {"Id":180,....


 var recordPosted = JsonConvert.DeserializeObject<record>(recordAsJson);
 //recordPosted = Id : 0

我如何解决这个问题?

修改

public virtual int Id { get; private set; }

2 个答案:

答案 0 :(得分:14)

Json.NET默认情况下不设置私有属性设置器。将setter设为public或在属性上放置[JsonProperty]属性。

答案 1 :(得分:1)

你没有展示record,但我会打赌你有类似的东西:

private int id;
public int Id { get { return id; } }

串行器可以在这里设置Id并不多,所以......它没有。注意:某些序列化程序(例如XmlSerializer)也会拒绝序列化,但JSON序列化程序往往更宽容,因为仅使用非常常见 serialize,用于将数据从Web服务器返回到javascript客户端,包括匿名类型(在C#中不可变)。

您可以尝试拥有隐私set

private int id;
public int Id { get { return id; } private set { id = value; } }

(或者)

public int Id { get; private set; }

如果仍然不起作用 - 可能必须完全公开:

private int id;
public int Id { get { return id; } set { id = value; } }

(或者)

public int Id { get; set; }