4

次のClassToSerializeクラスのオブジェクトをSystem.Runtime.Serialization.Json.DataContractJsonSerializerでシリアル化しようとすると

[DataContract,Serializable]
public class ClassToSerialize
{
    [NonSerialized] private bool _mf;
    public bool IsMf
    { 
        get { return _mf};
        set{ _mf = value;} 
    }

    [DataMember]
    public char PrimaryExc { get; set; }        
}

public class TestClass
{
    ClassToSerialize obj = new ClassToSerialize{PrimaryExchange = 'a', NoResults = true};
    var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(ClassToSerialize);
    var ms = new MemoryStream();
    serializer.WriteObject(ms, obj);
    return Encoding.UTF8.GetString(ms.ToArray());
}

戻り文字列には、IsMfプロパティとその値が引き続き含まれています。NOnSerialized属性は無視されます。一部のプロパティをシリアル化しないように、DataContractJsonSerializerを使用するときに使用する属性を誰かが提案できますか?

4

2 に答える 2

4

次のコードは私のために働きました(それはいくつかの小さなコンパイルエラーが修正されたあなたのものとほとんど同じです):

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

class Program
{
    static void Main()
    {
        var obj = new ClassToSerialize
        {
            PrimaryExc = 'a', 
            NoResults = true
        };

        var serializer 
            = new DataContractJsonSerializer(typeof(ClassToSerialize));

        var ms = new MemoryStream();

        serializer.WriteObject(ms, obj);

        Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
    }
}

[DataContract]
[Serializable]
public class ClassToSerialize
{
    [NonSerialized]
    private bool _mf;

    public bool IsMf
    {
        get { return _mf; }
        set { _mf = value; }
    }

    [DataMember]
    public bool NoResults { get; set; }

    [DataMember]
    public char PrimaryExc { get; set; }
}

出力:

{"NoResults":true,"PrimaryExc":"a"}

于 2010-11-20T21:18:25.773 に答える
2

いいえ、含まれていません。あなたは間違っているに違いありません:

[DataContract]
public class ClassToSerialize
{
    [NonSerialized] 
    private bool _mf;
    public bool IsMf
    {
        get { return _mf; }
        set{ _mf = value;}  
    }

    [DataMember]
    public char PrimaryExc { get; set; }        
}

class Program
{
    static void Main()
    {
        var obj = new ClassToSerialize 
        {
            PrimaryExc = 'a', 
            IsMf = false
        };
        var serializer = new DataContractJsonSerializer(obj.GetType());
        serializer.WriteObject(Console.OpenStandardOutput(), obj);
    }
}

出力:

{"PrimaryExc":"a"}

[Serializable]備考:クラスに属性は必要ありません。これは、バイナリシリアル化の場合のみです。

于 2010-11-20T21:28:27.473 に答える