2015-09-06 2 views
0

Я использую Json.net (Newtonsoft.Json) для сериализации или десериализации некоторого класса.Json.net Как мне сериализовать или десериализовать все свойство, даже включить non [DataMember]?

Существует мой класс

[DataContract] 
Public class Person 
{ 
    [DataMember] 
    public string ID { get; set; } 
} 

public class Student : Person 
{ 
    public string StudentName { get; set;} 
} 

Теперь я хочу сериализации студента, но выглядит как Json.net только сериализации или десериализации DataContract класс и DataMember свойство. Это всегда игнорировать мои StudentName недвижимость, но мне нужно это включить.

Есть ли способ исправить это? Спасибо.

+0

Вы попробовали newtonsoft.json? – willaien

+0

@willaien Что? Я в настоящее время использую Newtonsoft.Json, и я думал, что это Json.net ..... – qakmak

+0

Хорошо. Вот что, вероятно, происходит. По умолчанию newtonsoft.json будет сериализовать все свойства, но из-за того, что ваш класс наследует атрибуты от своего родителя, вы сказали newtonsoft.json не сериализовать эти свойства без атрибутов. Если вы удалите все атрибуты, он должен работать. – willaien

ответ

0

В соответствии с official site вам просто нужно добавить атрибут [DataMember] для StudentName, чтобы иметь это свойство в строке json.

+0

Есть ли другой способ? Потому что я не хочу добавлять его во все классы. существует так много классов ..... – qakmak

0

Если вам нужно добавить объект StudentName, просто добавьте [DataMember] атрибут этого свойства.

Тем не менее, еще одним простым способом может быть полное удаление [DataContract] и [DataMember] как Newtonsfot.Json не нуждается в них, чтобы определить, какие свойства включить.

public class Person 
{ 
    public string ID { get; set; } 
} 

public class Student : Person 
{ 
    public string StudentName { get; set;} 
} 

// ... 

Student student = new Student() { ID = "1", StudentName = "John" }; 
string resultJson = Newtonsoft.Json.JsonConvert.SerializeObject(student); 
+0

Есть ли альтернативный способ? Поскольку классов так много ... оба метода [DataContract] 'и' non [DataContract] ' – qakmak

+0

@qakmak Todd уже показали решение. * ContractResolver *. – Eser

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