簡體   English   中英

將類序列化為JSON時如何修改其名稱

[英]How to modify the name of a class when serializing it to JSON

我有一個實體類,如下所示。 我正在使用Json.Net將其序列化為JSON。 現在,類中有幾個字段/屬性需要使用與實際屬性不同的名稱進行序列化,並且可以使用[JsonProperty]屬性輕松實現,如下面的代碼所示。 但是,如果我需要更改以[JsonObject]屬性標記的主體實體本身的名稱,該怎么辦? (在這里,我談論的是從EntityBase<int>派生的UserDashboards類。)我嘗試添加一些命名參數,例如title,id等,但它們沒有幫助。

     [JsonObject]
     public class UserDashboards : EntityBase<int>
     {  
        public int UserID { get; set; }
        public int DashboardID { get; set; }
        public int DashboardSequence { get; set; }
        public string DashboardTitle { get; set; }
        public int PermissionLevelID { get; set; }
        [JsonProperty("IsHome")]
        public Nullable<bool> IsHomeDashboard { get; set; }
        [JsonProperty("IsShared")]
        public Nullable<bool> IsSharedDashboard { get; set; }             
      }

如果您的對象位於JSON的根級別,則無法為其分配名稱。 根據規范,JSON中的對象實際上沒有名稱(請參閱JSON.org )。 對象屬性具有名稱。 因此,如果您實際上想在JSON中命名對象,則需要將其包裝在另一個對象中。 然后,您可以在包裝對象中為該屬性分配名稱。 像這樣:

class Wrapper
{
    [JsonProperty("UserData")]
    public UserDashboards UserDashboards { get; set; }
}

如果隨后對包裝對象進行序列化,則最終將得到JSON,如下所示:

{
    "UserData" :
    {
        "UserID" : 42,
        "DashboardID" : 26,
        "DashboardSequence" : 1,
        "DashboardTitle" : "Foo",
        "PermissionLevelID" : 99,
        "IsHome" : true,
        "IsShared" : false
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM