2012-11-20 1 views
2

J'ai essayé le code dans Visual Studio sous Windows pour être sûr.Mono n'honore pas System.Runtime.Serialization.DataMemberAttribute Paramètre EmitDefaultValue

Le cadre Mono ne semble pas honorer l'argument EmitDefaultValue du DataMemberAttribute. En utilisant le code suivant:

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

namespace MyApp 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Cereal specialK = new Cereal(); 
      specialK.TheValue="This is a what?"; 

      var ser = new DataContractJsonSerializer(typeof(Cereal)); 
      MemoryStream stm = new MemoryStream(); 
      ser.WriteObject(stm, specialK); 
      string json = System.Text.Encoding.UTF8.GetString(stm.ToArray()); 

      Console.WriteLine(json); 
      Console.ReadLine(); 
     } 
    } 

    [DataContract] 
    class Cereal 
    { 
     [DataMember(Name="set_on_serialize")] 
     private string _setOnSerialize = string.Empty; 

     [DataMember(Name = "default_export", EmitDefaultValue = false)] 
     private string _default_null; 

     public Cereal() { } 

     [DataMember(Name = "out_value")] 
     public string TheValue 
     { 
      get; 
      set; 
     } 

     [OnSerializing] 
     void OnSerializing(StreamingContext content) 
     { 
      this._setOnSerialize = "A brick!"; 
     } 
    } 
} 

La sortie Mono résulte:

{"default_export":null,"out_value":"This is a what?","set_on_serialize":""} 

La propriété default_export est exportée comme nulle, mais ne devrait pas être sortie car il est la valeur par défaut de type string.

correcte sortie de VS sous Windows est:

{"out_value":"This is a what?","set_on_serialize":"A brick!"} 

Est-ce un bug dans Mono ou suis-je manque quelque chose?

+1

signaler ce bug sur http://www.mono-project.com/Bugs – pylover

+0

Veuillez également inclure les numéros de version dans vos questions, en particulier lorsque vous pointez sur d'éventuels bogues. – skolima

+0

Connecté. Merci. – Russell

Répondre

Questions connexes