2014-11-20 5 views
1

У меня есть несколько классов, которые производятся из базового класса. Свойства базового класса имеют атрибут [DataMember], но свойства производного класса не имеют его. Когда я использую JsonConvert.SerializeObject() в объекте дочернего класса, я вижу только свойства в базовом классе, которые сериализуются, если я не добавлю [DataMember] к свойству производного класса. Как сделать SerializeObject() для сериализации всех свойств производного класса, в том числе свойств, определенных в базовом классе, игнорируя атрибут [DataMember]? Я хочу избежать добавления [DataMember] ко всем свойствам производного класса.JSON.Net сериализует все свойства производного класса

ответ

-1

Без какого-либо фактического кода отправленный источник вашей проблемы трудно указать. Может быть, вы могли бы просто бросить все атрибуты де/сериализации, как [DataMember()] или [JsonProperty()], и дать ему еще одну попытку, так как имея

public abstract class Base 
{ 
    public abstract string BaseProp { get; } 
} 

public class MyBase : Base 
{ 
    public override string BaseProp { get { return "propA"; } } 
    public string MyBaseProp { get; set; } 
} 

public class My : MyBase 
{ 
    public string MyProp { get; set; } 
} 

А затем сериализовать данные экземпляры класса

var myBase = new MyBase { MyBaseProp = "prop1" }; 
Console.WriteLine(JsonConvert.SerializeObject(myBase)); 

var my = new My { MyBaseProp = "prop1", MyProp = "prop2" }; 
Console.WriteLine(JsonConvert.SerializeObject(my)); 

дает вам следующий вывод

{"BaseProp":"propA","MyBaseProp":"prop1"} 
{"MyProp":"prop2","BaseProp":"propA","MyBaseProp":"prop1"} 
+1

Нерелевантно к вопросу, Участник уже знает, как обращаться с сериализацией класса 'Derived/Base', но ищет оптимальный элегантный способ unmask члены класса 'Derived'. означает ** используя меньше '[DataMember]' над каждым 'Derived property' ** – Rzassar

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