確認するために、Windows の Visual Studio で同じコードをテストしました。
Mono フレームワーク 3.0.1 を搭載した Mac で MonoDevelop を使用する。オブジェクトを 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":"レンガ!"}
Mac の MonoDevelop では、次のようになります: {"out_value":"これは何ですか?","set_on_serialize":""}
Mono は何らかの理由で OnSerializing イベントを呼び出していません。
他の誰かがこれに遭遇しましたか、またはコードが失敗する理由を説明できますか?
ありがとう