2012-11-13 34 views
3

在Windows上的Visual Studio中測試出相同的代碼以確保。Mono 3.0.1中未調用的OnSerializing方法

在Mac上使用MonoDevelop與Mono框架3.0.1。我試圖將對象序列化爲JSON,並需要通過將System.Runtime.Serialization.OnSerializingAttribute分配給方法來填充OnSerializing事件中的一些屬性。但是,單聲道框架似乎沒有調用該方法。其他序列化事件都不能使用。簡化例如代碼:

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(); 

      DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Cereal)); 

      specialK.TheValue="This is a what?"; 

      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; 

     public Cereal() { } 

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

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

在Visual Studio中,輸出是: { 「out_value」: 「這是什麼?」, 「set_on_serialize」: 「一塊磚」}

在MonoDevelop在Mac上,我得到: {「out_value」:「這是一個什麼?」,「set_on_serialize」:「」}

Mono由於某種原因未調用OnSerializing事件。

有沒有其他人遇到過這個問題,或者你能幫助解釋爲什麼代碼失敗?

感謝

回答

2

這是單聲道的錯誤,我只是fixed這個給你:-)