C# System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteObject在序列化时忽略非序列化属性
如果我尝试使用System.Runtime.Serialization.Json.DataContractJsonSerializer序列化以下ClassToSerialize类的对象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};
[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"}