3

確認するために、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 イベントを呼び出していません。

他の誰かがこれに遭遇しましたか、またはコードが失敗する理由を説明できますか?

ありがとう

4

1 に答える 1

2

これは Mono のバグでした。これを修正しまし:-)

于 2012-11-13T16:20:09.460 に答える