【发布时间】:2014-03-26 07:52:48
【问题描述】:
我正在使用 WebAPI,它依赖于 JSON .NET 的 JSON 格式。在 C# 方面,我有一个如下所示的 DTO:
public class DTO1 : IManifestContainer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public HashSet<string> Manifest { get; private set; }
}
public interface IManifestContainer
{
HashSet<string> Manifest { get; }
}
IManifestContainer 接口的想法是跟踪客户端在 JSON 对象中实际发送到服务器的属性。例如,如果客户端发送此 JSON:
{"FirstName":"Jojo"}
Manifest hashset 将仅包含“FirstName”。 如果客户端发送:
{"FirstName":"Jojo", "LastName":"Jones"}
Manifest 哈希集将包含“FirstName”和“LastName”。
我尝试像这样实现一个 JsonConverter:
public class ManifestJsonConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
JObject jObject = JObject.Load(reader);
// Convert the JObject to a C# object??
// Passing the serializer will call this method again
object retVal = jObject.ToObject(objectType, serializer);
IManifestContainer manifestContainer = (IManifestContainer) retVal;
foreach (var jProperty in jObject.Properties())
{
manifestContainer.Manifest.Add(jProperty.Name);
}
return retVal;
}
public override bool CanConvert(Type objectType)
{
return typeof (IManifestContainer).IsAssignableFrom(objectType);
}
}
我需要加载 JObject 以获取来自客户端的所有属性,但是我不知道如何从 JObject 创建“objectType”实例(C# DTO)。
【问题讨论】:
标签: json.net json-deserialization