Sen*_*ncy 8 .net c# asp.net jquery json
我的实体是这样的:
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"
}
};
Run Code Online (Sandbox Code Playgroud)
现在我想将这个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"
}
}
Run Code Online (Sandbox Code Playgroud)
注意:上面只是一个例子.
我需要的是,我需要在序列化时自定义Key.默认情况下,它将属性名称作为键.我无法更改属性名称.这该怎么做?
此外,是否可以更改为JSON obj中出现的键值对的顺序?
您需要向DataContract类和属性添加属性DataMember.将Name属性的DataMemeber属性设置为自定义属性名称和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; }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
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);
Run Code Online (Sandbox Code Playgroud)
要检查结果:
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"}}
Run Code Online (Sandbox Code Playgroud)
您可以使用JavaScriptSerializer序列化匿名类型,因此您可以尝试将对象投影到要序列化的形状中:
person.Select(s => new { PER_NAME = s.Name, PER_AGE = s.Age });
Run Code Online (Sandbox Code Playgroud)