需要帮助在Json.net中在运行时更新/创建值

时间:2016-12-28 23:57:38

标签: c# json json.net json-deserialization

我使用JSON内容并尝试在使用Json.net反序列化为自定义对象后添加新属性。创建新属性后,它不会更新其引用类型。我不确定我在这里失踪了什么。有人可以帮忙吗?

这是继承Dictionary类型的基类。

<!-- language: c# -->

public abstract class BaseData : Dictionary<string, object>
{
    public string ID
       { get { return this["Id"] as string; } }

    public string Title
        { get { return this["Title"] as string; } }
}

这是我的页面类

public class CPage : BaseData
{
    public CPage(){ }

    public CPageTemplate PageTemplate
    {
        get { return (this["PageTemplate"] as JObject).ToObject<CPageTemplate>(); }
    }
}

这是我的模板类

public class CPageTemplate : BaseData
{
    public CPageTemplate(){}

    public CPageTemplate(PageTemplate pt)
    {
        this.Add("Id", pt.Id.ToString());
        this.Add("Title", pt.Title);
    }       
}

JSON内容

{
  "Id": "P_1",
  "Title": "enrolled",
  "PageTemplate": {
    "Id": "PT_1",
    "Title": "PageTemplate Transform"
  }  
}

用法如下

       JObject jo = JObject.Parse(File.ReadAllText(@"stack.json"));        
       CPage cPage = JsonConvert.DeserializeObject<CPage>(jo.ToString());

       cPage["Id"] = "C_1"; // works correctly 
       cPage.PageTemplate["Dynamic"] = true; // not able to retrieve

设置&#34;动态&#34;属性,如果我读cPage对象,我无法找到&#34;动态&#34;键。在更改现有&#34; Id&#34;的值时,也会发生同样的事情。或&#34;标题&#34;属性。即使在我更新之后,我也只能看到旧值。

此外,如果我更新Page对象的Id,我可以检索它的cPage对象。 PageTemplate 中的任何更改都没有得到反映。

有人可以帮我吗?

0 个答案:

没有答案