Json.Net - 显式包含一个私有属性

jon*_*ine 1 json.net

我有一个对象(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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

“TimeStamp”属性的值在服务返回之前被注入到类中。

我希望这个属性在 json.net 序列化/反序列化过程中继续存在,以便它可以返回到服务。

Ili*_*mov 5

如果要序列化/反序列化私有属性,请使用该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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的假设是您TimeStamp在构造函数中初始化该属性,因为它是私有属性。

序列化逻辑如下:

var customer = new Customer
    {
        CustomerId = Guid.NewGuid(),
        FirstName = "Jonh",
        LastName = "Doe"
    };

var json = JsonConvert.SerializeObject(customer, Formatting.Indented);
Console.WriteLine(json);
Run Code Online (Sandbox Code Playgroud)

输出应类似于以下内容:

{
    "TimeStamp": "635543531529938160",
    "CustomerId": "08537598-73c0-47d5-a320-5e2288989498",
    "FirstName": "Jonh",
    "LastName": "Doe",
    "Name": "Jonh Doe"
}
Run Code Online (Sandbox Code Playgroud)

除了TimeStampCustomerId属性外,由于显而易见的原因,这将具有不同的值。