用Ref属性反序列化JSON对象

本文关键字:JSON 对象 反序列化 属性 Ref | 更新日期: 2023-09-27 17:49:38

我正试图反序列化从github webhook发布的推送事件的JSON。

它使用"ref"属性来存储分支信息,但是ref在c#中是一个保留字,所以序列化不能工作。

现在我有

public class PushEvent
{
    [JsonProperty("ref")]
    public string _ref { get; set; }
    public string before { get; set; }
    public string after { get; set; }
    public bool created { get; set; }
    public bool deleted { get; set; }
    public bool forced { get; set; }
    public object base_ref { get; set; }
    public string compare { get; set; }
    public Commit[] commits { get; set; }
    public Head_Commit head_commit { get; set; }
    public Repository repository { get; set; }
    public Pusher pusher { get; set; }
    public Sender sender { get; set; }
}

but _ref总是被设置为null。作为参考,这里还有一个MVC动作,它将推送的数据写入一个文件——以防万一,这会产生影响

[HttpPost]
public JsonResult PushEvent(PushEvent data)
{
    var dataString = JsonConvert.SerializeObject(data);
    using(var writer = System.IO.File.CreateText(Server.MapPath("/app_data/" + DateTime.UtcNow.ToString("yyyyMMddhhmmss") + ".json")))
    {
        writer.Write(dataString);
    }
    return new JsonResult(){Data="ok"};
}

用Ref属性反序列化JSON对象

试试改成:

public class PushEvent
{
    public string @ref { get; set; }