C# System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject在序列化时忽略非序列化属性

C# System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject在序列化时忽略非序列化属性,c#,json,datacontractjsonserializer,C#,Json,Datacontractjsonserializer,如果我尝试使用System.Runtime.Serialization.Json.DataContractJsonSerializer序列化以下ClassToSerialize类的对象 [DataContract,Serializable] public class ClassToSerialize { [NonSerialized] private bool _mf; public bool IsMf { get { return _mf};

如果我尝试使用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属性及其值。将忽略非序列化属性。有人能建议在使用DataContractJsonSerializer时使用什么属性,以便不序列化某些属性吗?

以下代码适用于我(它几乎与您的相同,但修复了一些小的编译错误):

输出:

{“NoResults”:true,“PrimaryExc”:“a”}


不,里面没有。你一定弄错了:

[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"}

备注:您的类不需要该属性。这只是为了。

我对达林的回答投了赞成票,因为它更准确、更完整,而对这一回答投了反对票,因为它具有误导性。只有标有[DataMember]的成员才被序列化,其他成员则不被序列化。正如您所注意到的,不需要[NonSerialized],这一点会被忽略。
{"PrimaryExc":"a"}