2014-06-23 4 views
0

У меня есть класс сущности, как показано ниже. Я использую Json.Net для сериализации его в JSON. Теперь в классе есть несколько полей/свойств, которые должны быть сериализованы с разными именами из реальных свойств, и это легко достижимо с использованием атрибута [JsonProperty], как показано в приведенном ниже коде. Но что, если мне нужно изменить имя самого основного объекта, который помечен атрибутом [JsonObject]? (Здесь я говорю о классе UserDashboards, который получен из EntityBase<int>.) Я попытался добавить несколько именованных параметров, таких как название, идентификатор и т. Д., Но они не помогли.Как изменить имя класса при его сериализации в JSON

 [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

Я думал вопрос ясно дал понять, во всяком случае позвольте мне повторить. Серийное имя Json для вышеупомянутого класса/сущности UserDashboards должно быть чем-то вроде UserData. Что еще необходимо для объяснения этого вопроса? Какие фрагменты кода вы хотите и как они помогут. Я спрашиваю, может ли быть достигнуто в атрибуте [JsonObject]. Если мы не сможем добиться здесь того, что будет делать специальный код. –

+0

Непонятно, что вы просите. У Json нет * имени * для объекта * root *, как в xml. Таким образом, в вашей json-строке не будет такой строки, как * UserDashboards *. –

+0

Ваш комментарий просто разъясняет мои сомнения, я просто искал подтверждение, так как я не мог найти информацию о поиске, как использовать атрибут JsonObject для достижения того же. Похмелье XML заставляло меня думать, что это, безусловно, возможно. Пожалуйста, не голосуйте за любой пробел в понимании взгляда. –

ответ

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 
    } 
} 
+0

Огромное вам спасибо, что я точно достиг этого, обертывая его в другом классе и используя этот объект класса (Wrapper) для сериализации Json –

+0

Рад, что я мог бы помочь. –

0

Как понятно, это не представляется возможным сделать это с помощью атрибута JSONObject, пожалуйста, прочитайте комментарии выше

Смежные вопросы