gpt4 book ai didi

c# - JavaScriptSerializer 序列化内部属性成员

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:17 25 4
gpt4 key购买 nike

我有一个类似这样的类库项目....

[DataContract]
public class DomainVerify
{
[DataMember]
internal string key { get; set; }
public string domain { get; set; }
public string mailbox { get; set; }
}

我将 key 设置为 Internal,因此我的其他项目看不到此属性。现在的问题是,在我有“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/

最后但同样重要的是确保您的内部属性具有一定的值(value)。

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 的情况下,您必须使用 datacontract 标记要参与序列化的每个属性。

您必须添加 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);
}
}

希望以上内容对您有所帮助。

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

关于c# - JavaScriptSerializer 序列化内部属性成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com