我有一个实体类,如下所示。我正在使用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; }
}
答案 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
}
}