gpt4 book ai didi

c# - 使用 JSON.NET 将属性反序列化为 ExpandoObject

转载 作者:可可西里 更新时间:2023-11-01 07:52:20 27 4
gpt4 key购买 nike

例如,有一个像下一个这样的对象:

public class Container
{
public object Data { get; set; }
}

它是这样使用的:

Container container = new Container
{
Data = new Dictionary<string, object> { { "Text", "Hello world" } }
};

如果我反序列化通过序列化上述实例获得的 JSON 字符串,Data 属性,即使我提供了 ExpandoObjectConverter,它也不会反序列化为 ExpandoObject :

Container container = JsonConvert.Deserialize<Container>(jsonText, new ExpandoObjectConverter());

我如何反序列化分配给匿名对象的类属性,或者至少不是作为 ExpandoObject 的具体类型?

编辑:

有人回答说我可以只使用动态对象。这对我不起作用。我知道我可以这样做,但事实并非如此,因为我需要一个 ExpandoObject。谢谢。

编辑 2:

其他一些用户回答说我可以将 JSON 字符串反序列化为 ExpandoObject。这不是这个问题的目标。我需要反序列化具有动态属性的具体类型。在 JSON 字符串中,此属性可以是关联数组。

最佳答案

试试这个:

Container container = new Container
{
Data = new Dictionary<string, object> { { "Text", "Hello world" } }
};

string jsonText = JsonConvert.SerializeObject(container);

var obj = JsonConvert.DeserializeObject<ExpandoObject>(jsonText, new ExpandoObjectConverter());

我发现这样做从调用 DeserializeObject 得到了一个 ExpandoObject。我认为您提供的代码的问题在于,当您提供 ExpandoObjectConverter 时,您要求 Json.Net 反序列化 Container ,所以我想 ExpandoObjectConverter 没有被使用。

编辑:

如果我用 [JsonConverter(typeof(ExpandoObjectConverter))] 修饰 Data 属性并使用代码:

var obj = JsonConvert.DeserializeObject<Container>(jsonText);

然后 Data 属性被反序列化为一个 ExpandoObject,而 obj 是一个 Container

关于c# - 使用 JSON.NET 将属性反序列化为 ExpandoObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455304/

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