JavaScriptSerializer to Serialize internal property member
本文关键字:property member internal Serialize to JavaScriptSerializer | 更新日期: 2023-09-27 18:32:03
我有一个类库项目,里面有这样的东西......
[DataContract]
public class DomainVerify
{
[DataMember]
internal string key { get; set; }
public string domain { get; set; }
public string mailbox { get; set; }
}
我把密钥设置为内部,所以我的其他项目看不到此属性。现在的问题是,在我有"DomainVerify"类的同一项目中,我正在使用JavaScriptSerialize将我的类序列化为JSON字符串,并且似乎我无法序列化"key"属性,因为它是"内部"。
var json = new JavaScriptSerializer().Serialize(DomainVerify); // Skips Key property
无论如何,我可以将此属性隐藏到其他项目,但可以在同一项目中序列化此属性?
我认为你必须使用DataContractJsonSerializer。
下面是 MSDN 上提供的示例。此示例具有内部属性。
http://msdn.microsoft.com/en-us/library/bb412179(v=vs.110).aspx.
我没有尝试使用JavaScriptSerializer,但如果有一些设置允许,那么只有可以序列化内部,所以我建议尝试使用DataContractJsonSerialier。
如果这不能解决您的问题,请寻找Newton.Json。http://www.tecsupra.com/serializing-only-some-properties-of-an-object-to-json-using-newtonsoft-json-net/
最后但并非最不重要的一点是,请确保您的内部属性具有一定的价值。
DataContractJsonSerializer
class Program
{
static void Main(string[] args)
{
DomainVerify verify = new DomainVerify() { domain = "test", key = "myKey", mailbox = "Newkey" };
Console.WriteLine(GetJsonString(verify));
Console.ReadLine();
}
public static string GetJsonString(object o)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType());
using (MemoryStream ms = new MemoryStream())
{
ser.WriteObject(ms, o);
string jsonData = Encoding.Default.GetString(ms.ToArray());
return jsonData;
}
}
}
[DataContract]
public class DomainVerify
{
[DataMember]
internal string key { get; set; }
[DataMember]
public string domain { get; set; }
[DataMember]
public string mailbox { get; set; }
}
对于 WCF,必须使用数据协定标记要参与序列化的每个属性。
您必须添加 System.ServiceModel 和 System.Runtime.Serialization 程序集。
在 Json.net 的情况下(您必须添加包裹)
public class DomainVerify
{
[Newtonsoft.Json.JsonProperty] // if you don't mark this attribute then as this is internal property it will not serilize.
internal string key { get; set; }
[Newtonsoft.Json.JsonProperty] // as this is public property it always include in serilization unless you mark it with JsonIgnore.
public string domain { get; set; }
[Newtonsoft.Json.JsonProperty]
public string mailbox { get; set; }
}
class Program
{
static void Main(string[] args)
{
DomainVerify verify = new DomainVerify() { domain = "test", key = "myKey", mailbox = "Newkey" };
Console.WriteLine(GetJsonString(verify));
Console.ReadLine();
}
public static string GetJsonString(object o)
{
return JsonConvert.SerializeObject(o);
}
}
我希望以上的事情对你有所帮助。
注意:我仍然有些怀疑,如果您从其他项目传递此对象,那么此字段可能包含不正确的值或空,因为它是内部的。