我有以下JSON:
{
"id" : "2"
"categoryId" : "35"
"type" : "item"
"name" : "hamburger"
}
{
"id" : "35"
"type" : "category"
"name" : "drinks"
}
Run Code Online (Sandbox Code Playgroud)
我想将它与此对象匹配:
public class Item
{
[JsonProperty(PropertyName = "categoryId")]
public Category Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Category是Entity具有string Id我可以访问的属性的类型.我希望JSON反序列化器创建的"35"对象映射到该Category属性中Item.
根据文档,我应该使用IReferenceResolver.我如何实现此接口并将其挂钩到JSON.NET框架中?
小智 12
您可以在JsonSerializerSettings中指定自定义IRefenceResover:
JsonSerializerSettings settings = new JsonSerializerSettings ();
settings.ReferenceResolver = new IDReferenceResolver ();
Run Code Online (Sandbox Code Playgroud)
对于具有Guid id属性的对象,有一个很好的IDReferenceResolver实现示例.引用字符串现在是对象的id,它类似于您的用例,除了您的id属性使用int而不是Guid类型.
using System;
using System.Collections.Generic;
using Newtonsoft.Json.Serialization;
namespace Newtonsoft.Json.Tests.TestObjects
{
public class IdReferenceResolver : IReferenceResolver
{
private readonly IDictionary<Guid, PersonReference> _people = new Dictionary<Guid, PersonReference>();
public object ResolveReference(object context, string reference)
{
Guid id = new Guid(reference);
PersonReference p;
_people.TryGetValue(id, out p);
return p;
}
public string GetReference(object context, object value)
{
PersonReference p = (PersonReference)value;
_people[p.Id] = p;
return p.Id.ToString();
}
public bool IsReferenced(object context, object value)
{
PersonReference p = (PersonReference)value;
return _people.ContainsKey(p.Id);
}
public void AddReference(object context, string reference, object value)
{
Guid id = new Guid(reference);
_people[id] = (PersonReference)value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8142 次 |
| 最近记录: |