gpt4 book ai didi

c# - 使用 JavaScriptSerializer 将实体映射到 JSON

转载 作者:太空狗 更新时间:2023-10-29 18:20:53 24 4
gpt4 key购买 nike

我的实体是这样的:

class Address
{
public string Number { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string Country { get; set; }
}

class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Address PostalAddress { get; set; }
}

Person newPerson =
new Person()
{
Name = "Kushan",
Age = 25,
PostalAddress =
new Address()
{
Number = "No 25",
Street = "Main Street",
City = "Matale",
Country = "Sri Lanka"
}
};

现在我想像这样将这个 newPerson 对象映射到 JSON 对象中,

{ 
"PER_NAME" : "Kushan",
"PER_AGE" : "25",
"PER_ADDRESS" : {
"ADD_NUMBER" : "No 25",
"ADD_STREET" : "Main Street",
"ADD_CITY" : "Matale",
"ADD_COUNTRY" : "Sri Lanka"
}
}

注:以上仅为示例。

我需要的是,我需要在序列化时自定义Key。默认情况下,它以属性名称作为键。我无法更改属性名称。如何做到这一点?

此外,是否可以更改 JSON 对象中键值对的出现顺序?

最佳答案

您需要将 DataContract 属性添加到您的类中,并将 DataMember 添加到属性中。将 DataMemeber 属性的 Name 属性设置为您的自定义属性名称和 Order 属性以定义顺序。

[DataContract]
public class Person
{
[DataMember(Name = "PER_NAME", Order = 1)]
public string Name { get; set; }

[DataMember(Name = "PER_AGE", Order = 2)]
public int Age { get; set; }

[DataMember(Name = "PER_ADDRESS", Order = 3)]
public Address PostalAddress { get; set; }
}

然后你可以这样做:

var newPerson = new Person()
{
Name = "Kushan",
Age = 25,
PostalAddress = new Address()
{
Number = "No 25",
Street = "Main Street",
City = "Matale",
Country = "Sri Lanka"
}
};

MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream, newPerson);

检查结果:

var result = Encoding.ASCII.GetString(stream.ToArray());

{"PER_NAME":"Kushan","PER_AGE":25,"PER_ADDRESS":{"ADD_NUMBER":"No 25","ADD_STREET":"Main Street","ADD_CITY":"Matale","ADD_COUNTRY":"Sri Lanka"}}

关于c# - 使用 JavaScriptSerializer 将实体映射到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398171/

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