2013-09-16 2 views
5

Я пытаюсь сериализовать экземпляр класса, который наследуется от DynamicObject. У меня не было проблем с получением динамических свойств для сериализации (не показано здесь для краткости), но «нормальные» свойства, похоже, не совершают поездки. Я испытываю ту же проблему, независимо от класса сериализации: это то же самое для JavaScriptSerializer, JsonConvert и XmlSerializer.C# Как упорядочить (JSON, XML) нормальные свойства для класса, который наследует от DynamicObject

public class MyDynamicClass : DynamicObject 
{ 
    public string MyNormalProperty { get; set; } 
} 

... 

MyDynamicClass instance = new MyDynamicClass() 
{ 
    MyNormalProperty = "Hello, world!" 
}; 

string json = JsonConvert.SerializeObject(instance); 
// the resulting string is "{}", but I expected to see MyNormalProperty in there 

Должно ли не отображаться MyNormalProperty в сериализованной строке? Есть трюк, или я неправильно понял что-то фундаментальное в наследовании от DynamicObject?

ответ

3

Вы можете использовать DataContract/DataMember атрибуты System.Runtime.Serialization

[DataContract] 
    public class MyDynamicClass : DynamicObject 
    { 
     [DataMember] 
     public string MyNormalProperty { get; set; } 
    } 

Этот способ сериализации не будет работать независимо от того, что сериализатор, который вы используете ...

3

Просто используйте JsonProperty атрибут

public class MyDynamicClass : DynamicObject 
{ 
    [JsonProperty("MyNormalProperty")] 
    public string MyNormalProperty { get; set; } 
} 

Выход:{"MyNormalProperty":"Hello, world!"}

+0

Спасибо - это работает и сделало бы это, если бы я развивался строго с Newtwonsoft.Json. :) –