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事件。
有沒有其他人遇到過這個問題,或者你能幫助解釋爲什麼代碼失敗?
感謝