2010-02-11 8 views
2

Je suis dérivé de la classe (excellente) PropertyBag, puis je souhaite sérialiser vers Json à l'aide de DataContractJsonSerializer. Malheureusement, les propriétés dynamiques n'apparaissent pas dans le JSON malgré leur création avec un attribut DataContractAttribute. Comment puis-je sérialiser ces propriétés dynamiques?DataContractJsonSerializer ne voit pas DataMemberAttribute

using System; 
using System.ComponentModel; 
using System.IO; 
using System.Runtime.Serialization; 
using System.Runtime.Serialization.Json; 

namespace JsonProperties 
{ 
    [DataContract] 
    class MyClass : PropertyBag 
    { 
     static MyClass() 
     { 
      Attribute att_lat = new DisplayNameAttribute("Latitude"); 
      Attribute att_data = new DataMemberAttribute(); 

      Attribute[] attribs_lat = { att_lat, att_data }; 

      MyClass.AddProperty("_Latitude", typeof(String), attribs_lat); 
     } 
     [DataMember] 
     public Decimal latitude 
     { 
      get { return (Decimal)this["_Latitude"]; } 
      set 
      { // Validation etc. 
       this["_Latitude"] = value; 
      } 
     } 
    } 

    class Program 
     { 
      static void Main(string[] args) 
      { 
       Attribute attr1 = new DisplayNameAttribute("Dynamic Note Property"); 
       Attribute attr2 = new DataContractAttribute(); 
       Attribute[] attrs = { attr1, attr2 }; 

       MyClass.AddProperty("Notes", typeof(String), attrs); 
       MyClass location = new MyClass(); 

       location.latitude = 0.1M; 
       location["Notes"] = "Some text"; 

       DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(MyClass)); 
       dcjs.WriteObject(Console.OpenStandardOutput(), location); 
       Console.ReadLine(); 
      } 
     } 
    } 

Répondre

1

La propriété « Notes » doit être décoré avec DataMemberAttribute pour qu'il se ramassé par le sérialiseur JSON. Pas DataContractAttirbute, comme vous l'utilisez ici.

Questions connexes