在将类序列化为JSON时如何修改类的名称

时间:2014-06-23 21:53:13

标签: c# json json.net

我有一个实体类,如下所示。我正在使用Json.Net将其序列化为JSON。现在,类中有几个字段/属性需要使用与实际属性不同的名称进行序列化,并且可以使用[JsonProperty]属性轻松实现,如下面的代码所示。但是,如果我需要更改主要实体本身的名称,并使用[JsonObject]属性标记,该怎么办? (这里我说的是UserDashboards类派生自EntityBase<int>。)我尝试添加一些命名参数,如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; }             
      }

1 个答案:

答案 0 :(得分:2)

如果您的对象位于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
    }
}