3

在 Windows 上的 Visual Studio 中测试了相同的代码以确保。

在 Mac 上使用 MonoDevelop 和 Mono 框架 3.0.1。我正在尝试将对象序列化为 JSON,并且需要通过将 System.Runtime.Serialization.OnSerializingAttribute 分配给方法来填充 OnSerializing 事件中的一些属性。但是,mono 框架似乎没有调用该方法。其他序列化事件也不起作用。简化代码例如:

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":"This is a what?","set_on_serialize":"Abrick!"}

在 Mac 上的 MonoDevelop 中,我得到: {"out_value":"This is a what?","set_on_serialize":""}

由于某种原因,Mono 没有调用 OnSerializing 事件。

Has anyone else encountered this or can you help explain why the code fails?

Thanks

4

1 回答 1

2

This was a bug in Mono, I just fixed this for you :-)

于 2012-11-13T16:20:09.460 回答