4

如果我尝试使用 System.Runtime.Serialization.Json.DataContractJsonSerializer 序列化以下 ClassToSerialize 类的对象

[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 回答