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

无论如何,我可以将此属性隐藏到其他项目,但可以在同一项目中序列化此属性?

JavaScriptSerializer to Serialize internal property member

我认为你必须使用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);
        }
     }

我希望以上的事情对你有所帮助。

注意:我仍然有些怀疑,如果您从其他项目传递此对象,那么此字段可能包含不正确的值或空,因为它是内部的。