JSON数据到动态(匿名类型)的转换

时间:2019-05-17 15:22:24

标签: c# json.net

我无法将JSON数据转换为动态类型定义。我看过JObject,JsonConvert序列化/反序列化,没有任何效果。使这项工作最接近的是JsonConvert.DeserializeAnonymousType,但这需要一个与JSON匹配的定义。就我而言,JSON非常复杂,因此我确实需要将JSON实例转换为完全匿名的动态类型。

dynamic rawjson = @"{ 'tags': { 'abcd' : '12345' },'properties': { 'desired': {  'PropOne' : '2345', 'PropTwo' : '6789' } } }";

#region reference object
dynamic reference = new
{
    SomeName = $"xxxx",
    initialTwin = new
    {
        tags = new { abcd = 12345 },
        properties = new
        {
            desired = new
            {
                PropOne = "2345",
                PropTwo = "6789"
            }
        }
    }
};

#endregion

dynamic anonobject = JsonConvert.DeserializeAnonymousType(rawjson, reference.initialTwin);

dynamic testobject = new
{
    SomeName = $"xxxx",
    initialTwin = $"{anonobject}"
};

我需要上面的代码中的“ testobject”看起来完全像“ reference”对象。使用DesializeAnonymousType使我很接近,但是很难创建和维护该定义。

如何在不键入DeserializeAnonyousType定义的情况下从JSON数据实例获得相同的结果?有可能吗?

1 个答案:

答案 0 :(得分:0)

我已经测试了以下方法,并且对我有用:

outer()

但是,由于这是一个动态对象,因此您需要了解可能要使用的属性。

示例:

var anonobject = JsonConvert.DeserializeObject<ExpandoObject>(rawjson);

dynamic testobject = new
{
    SomeName = $"xxxx",
    initialTwin = anonobject
};