动态/ Expando和JSON

时间:2017-01-05 23:30:06

标签: c# json asp.net-mvc dynamic

这方面有很多Q,但我需要一个没有JSON.Net等的解决方案 - 我必须使用Asp.Net MVC中的罐装东西。

如何使用动态属性序列化POCO - 并获取所有静态属性?我发现的只是动态,或静态类型,这很容易。

e.g。

public class ReturnThisClassAsJSON {
    public int Id {get; set; }
    public string Name { get; set; }
    public ContainedClass ContainedContents { get; set; }
}

public class ContainedClass {
    public int Order { get; set; }
    public string Label { get; set; }
    public dynamic DynamicInfo { get; set; }
    public List<dynamic> DynamicList { get; set }
}

1 个答案:

答案 0 :(得分:0)

我自己的回答:

我用ContainedClass中的DynamicInfo和DynamicList替换了静态类型的动态。

随着动态,我有两个选择之一。使用上面的SO问题5156664将动态序列化为自己的序列化调用中的字符串。(这使我得到了类的其余部分,我也想要序列化并与之合并,因此这个问题)。或者,引发此错误:

&#34;在序列化类型为&#39; System.Reflection .RuntimeModule&#39;的对象时检测到循环引用。 &#34;

在ContainedClass上尝试单个序列化调用时。

所以,我把动力学转移到静态类型中:

public class ColumnValue 
{
    public string Name { get; set; }
    public string Value { get; set; }
}

public class DynamicRow 
{
    public List<ColumnValue> ColumnValue { get; set; }
}

并将ContainedClass更改为:

public class ContainedClass
{
    public List<ColumnValue> DynamicInfo { get; set; }
    public List<DynamicRow>  Data { get; set; }
}

并且,它使用开箱即用的Asp.Net MVC序列化:

 return Json(ReturnThisClassAsJSON, JsonRequestBehaviour.AllowGet);