gpt4 book ai didi

c# - 使用 System.Text.Json 将 JSON 反序列化为包含动态属性的类

转载 作者:行者123 更新时间:2023-12-04 11:30:57 25 4
gpt4 key购买 nike

目标是使用新的 将 JSON 响应反序列化为包含动态部分的包装器响应类。 System.Text.Json 图书馆来自 NET 核心 3 .

那是

{
"fixedProperty": "Hello",
"dynamicProperty": {
"attributeOne": "One",
"attributeTwo": "Two",
}
}


public class MyResponseClass
{
public string FixedProperty { get; set; }
public dynamic DynamicProperty { get; set; }
}

// Where the dynamic property is one of the classes.
// (MyDataClassOne in the particular JSON example above)
public class MyDataClassOne
{
public string AttributeOne { get; set; }
public string AttributeTwo { get; set; }
}

public class MyDataClassTwo
{
public string AttributeThree { get; set; }
public string AttributeFour { get; set; }
}

...

响应中动态属性的类型总是预先知道的(取决于请求),并且是三个不同类之一。

无法找到一种干净的方法来做到这一点,除了没有一个具有动态属性的包装类,而是每个案例都有多个不同的响应类(这显然工作正常,但不是所需的解决方案)。

编辑:
解决方案是使用泛型。

最佳答案

这样的事情怎么样?

var myResponseClass = new MyResponseClass();

dynamic myClass = JsonSerializer.Deserialize<ExpandoObject>("{\"fixedProperty\":\"Hello\",\"dynamicProperty\": {\"attributeOne\":\"One\",\"attributeTwo\":\"Two\"}}");
dynamic myProperty = JsonSerializer.Deserialize<ExpandoObject>(myClass.dynamicProperty.ToString());

myResponseClass.FixedProperty = myClass.fixedProperty.ToString();
myResponseClass.DynamicProperty = myProperty;

关于c# - 使用 System.Text.Json 将 JSON 反序列化为包含动态属性的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59953651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com