[英]Deserializing json into new objects
我正在從我不擁有的 api 中讀取一些 Json,因此,我無法更改響應。 當我使用 Newtonsoft 將 Json 反序列化為 C# 對象時,我遇到了“ChangedAttributes”字段的問題。 創建這些類時,Visual Studio 想要為“Sex”創建一個類,並為“MaritalStatus”創建一個類,但它們沒有被填充。 此外,ChangedAttributes 列表可以是數百種不同的可能性。 所以,我想將這些屬性反序列化為一個泛型類,比如:
public class Attribute
{
public string Name {get;set;}
public string Old {get;set;}
public string New {get;set;}
}
有人可以告訴我如何使用 Newtonsoft 實現這一目標嗎? 這是我試圖解析的 Json 示例:
{
"Context" : [ {
"PersonName" : "Smith, Bob",
"PersonNumber" : "001246",
"PrimaryPhoneNumber" : "",
"PersonId" : "300000009560451",
"WorkerType" : "EMP",
"PeriodType" : "E",
"DMLOperation" : "UPDATE",
"EffectiveStartDate" : "2004-08-27",
"EffectiveDate" : "2004-08-27"
} ],
"Changed Attributes" : [ {
"Sex" : {
"old" : null,
"new" : "M"
}
}, {
"MaritalStatus" : {
"old" : null,
"new" : "S"
}
} ]
}
以下是 VS 為我生成的 C# 類:
public class AtomFeed_Empupdate
{
public AtomFeed_Empupdate_Context[] Context { get; set; }
public AtomFeed_Empupdate_ChangedAttribute[] ChangedAttributes { get; set; }
}
public class AtomFeed_Empupdate_Context
{
public string PersonName { get; set; }
public string PersonNumber { get; set; }
public string WorkEmail { get; set; }
public string PrimaryPhoneNumber { get; set; }
public string PersonId { get; set; }
public string WorkerType { get; set; }
public string PeriodType { get; set; }
public string DMLOperation { get; set; }
public string EffectiveStartDate { get; set; }
public string EffectiveDate { get; set; }
}
public class AtomFeed_Empupdate_ChangedAttribute
{
public AtomFeed_Empupdate_Sex Sex { get; set; }
public AtomFeed_Empupdate_Maritalstatus MaritalStatus { get; set; }
}
public class AtomFeed_Empupdate_Sex
{
public string old { get; set; }
public string _new { get; set; }
}
public class AtomFeed_Empupdate_Maritalstatus
{
public string old { get; set; }
public string _new { get; set; }
}
這是我反序列化 Json 的方式:
AtomFeed_Empupdate eu = Newtonsoft.Json.JsonConvert.DeserializeObject<AtomFeed_Empupdate>(json);
謝謝你的幫助!
您可以稍微更改Attribute
類並使用具有正確名稱的JsonProperty
屬性對其進行裝飾
public class Attribute
{
[JsonProperty("old")]
public string Old { get; set; }
[JsonProperty("new")]
public string New { get; set; }
}
並使用Dictionary<string, Attribute>[]
(因為你有一個鍵值對數組)作為Changed Attributes
JSON 令牌
public class AtomFeed_Empupdate
{
public AtomFeed_Empupdate_Context[] Context { get; set; }
[JsonProperty("Changed Attributes")]
public Dictionary<string, Attribute>[] ChangedAttributes { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.