我有一个对象(ViewModel),其中我有一个私有属性,其中包含有关模型的一些元数据。我想在对象的序列化/反序列化中明确地包含这个私有属性。
我可以添加到属性中的Json.Net属性吗?
public class Customer
{
private string TimeStamp { get; set; }
public Guid CustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Name
{
get
{
return FirstName + " " + LastName;
}
}
}
“TimeStamp”属性的值在服务返回之前注入到类中。
我希望这个属性能够在json.net序列化/反序列化过程中存活下来,以便它可以返回给服务。
答案 0 :(得分:3)
如果要序列化/反序列化privete属性,请使用JsonProperty
属性进行装饰。你的课应该是这样的:
public class Customer
{
[JsonProperty]
private string TimeStamp { get; set; }
public Guid CustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Name
{
get
{
return FirstName + " " + LastName;
}
}
public Customer()
{
TimeStamp = DateTime.Now.Ticks.ToString();
}
}
这里假设您在构造函数中初始化TimeStamp
属性,因为它是私有属性。
序列化逻辑如下:
var customer = new Customer
{
CustomerId = Guid.NewGuid(),
FirstName = "Jonh",
LastName = "Doe"
};
var json = JsonConvert.SerializeObject(customer, Formatting.Indented);
Console.WriteLine(json);
输出应类似于以下内容:
{
"TimeStamp": "635543531529938160",
"CustomerId": "08537598-73c0-47d5-a320-5e2288989498",
"FirstName": "Jonh",
"LastName": "Doe",
"Name": "Jonh Doe"
}
除了TimeStamp
和CustomerId
属性之外,由于显而易见的原因,它们会有不同的值。