我正在使用Newtonsoft将JSON从REST调用反序列化为C#对象。该对象是Person列表。人有很多属性,但现在我只存储了一些属性。我想在Person上有一个字符串属性,它包含组成整个人的JSON。有没有办法做到这一点?我现在正把它写回到SQL数据库中,我不需要这些值,但是如果需要的话,我希望将它用于将来的使用。
对象类
public class Worker
{
public string associateOID { get; set; }
public WorkerID workerID { get; set; }
public Person person { get; set; }
public WorkerDates workerDates { get; set; }
public WorkerStatus workerStatus { get; set; }
public List<WorkAssignment> workAssignments { get; set; }
public CustomFieldGroup customFieldGroup { get; set; }
public BusinessCommunication businessCommunication { get; set; }
public string JSON { get; set; }
}
public class Meta
{
public int totalNumber { get; set; }
}
public class WorkerResult
{
public List<Worker> workers { get; set; }
public Meta meta { get; set; }
}
我现在要求反序列化:
WorkerResult result = JsonConvert.DeserializeObject<WorkerResult>(json);
答案 0 :(得分:3)
我认为您的意思是要将JSON中的所有属性存储到c#对象中 - 以便以后可以在需要时访问它们。
为此,请使用[JsonExtensionData]
注释。
public class Worker
{
public string associateOID { get; set; }
// Any other attributes that you want to use as .NET types go here
// all attributes that don't have a property will be put into this dictionary
// either as primitive types, or as objects of type Newtonsoft.Json.Linq.JObject
// supports nested objects of any Json structure, and will serialize correctly.
[JsonExtensionData]
public Dictionary<string,object> ExtraAttributes {get;set;}
}
您可以在https://dotnetfiddle.net/N5SuCY看到完整示例。
要将这些属性存储在数据库中,可以将其与计算的字符串属性结合使用:
[JsonIgnore]
public string SerializedExtraAttributes => JsonConvert.SerializeObject(ExtraAttributes);
答案 1 :(得分:1)
将JsonIgnore属性添加到您的JSON属性,如下所示:
[JsonIgnore()]
public string JSON { get; set; }
您可以在对对象进行反序列化后使用
JObject workerResult = JObject.Parse(json);
// this should contain a list of all the workers
IList<JToken> workers = workerResult["workers"].Children().ToList();
之后,迭代您之前获得的result
对象中的所有worker,并将JSON
属性设置为等效的worker对象
for (int i = 0; i < result.workers.Count; i++)
result.workers[i].JSON = workers[i].ToString();