DataContractJsonSerializer没有看到DataMemberAttribute

DataContractJsonSerializer没有看到DataMemberAttribute

问题描述:

我从(优秀的)PropertyBag类派生出来,然后想要使用DataContractJsonSerializer序列化为Json。不幸的是,尽管使用DataContractAttribute创建了动态属性,但它并未显示在JSON中。我如何序列化这些动态属性?DataContractJsonSerializer没有看到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(); 
      } 
     } 
    } 

“注释”属性应该同DataMemberAttribute装饰为它由JSON序列得到回升。不是DataContractAttirbute,就像你在这里使用的那样。