【发布时间】:2015-07-23 15:23:53
【问题描述】:
我有一个看起来像的 c# 类
public class Node {
public int Id { get; set; }
/** Properties omitted for sake of brevity **/
public Node ParentNode { get; set; }
}
在浏览器中,我提交了一个 JSON 对象,如下所示
{"Id":1, "ParentNode":1}
分配给 ParentNode 属性的值 1 表示数据库标识符。因此,为了正确绑定到我的模型,我需要编写一个自定义 JSON 转换器
public class NodeJsonConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
/** Load JSON from stream **/
JObject jObject = JObject.Load(reader);
Node node = new Node();
/** Populate object properties **/
serializer.Populate(jObject.CreateReader(), node);
return node;
}
}
因为我得到一个“当前 JsonReader 项目不是对象:整数。路径 ParentNode'”,如何调整 ReadJson 方法以绑定 ParentNode 属性或其他需要自定义转换的东西?
更新
我看到了JsonPropertyAttribute 的 API 文档说明
指示 JsonSerializer 始终序列化具有指定名称的成员
但是,我如何以编程方式指示 JsonSerializer(在我的例子中,在 ReadJson 方法中)使用给定的 JsonPropertyAttribute ?
http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonPropertyAttribute.htm
【问题讨论】:
-
1) 你需要序列化,还是只反序列化? 2) 假设你已经读取了父节点ID,如何让父节点设置在子节点中?
标签: c# asp.net json asp.net-web-api