我试图将JSON API响应反序列化为一个主要定义的对象,但它有一个动态的部分。在dotnet核心中有一个很好的方法来处理这个问题。我发现答案要求我将根对象定义为动态,然后将其解析或反序列化,但我希望将我的根对象保持为定义,并将子部分保持为动态。
以下是我在stackoverflow上找到的不符合我要求的示例:
dynamic d = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}");
或
var product = new { Name = "", Price = 0 };
dynamic jsonResponse = JsonConvert.Deserialize(json, product.GetType());
或
dynamic jsonResponse = JsonConvert.DeserializeObject(json);
Console.WriteLine(jsonResponse["message"]);
我对类/数据模型定义的含义:
public class RootObject
{
public int Id { get; set; }
public DefinedData DefinedData { get; set; }
public DynamicData DynamicData { get; set; } // This one is dynamic
public DateTime DateCreated { get; set; }
public DateTime LastUpdated { get; set; }
public bool Enabled { get; set; }
}
JSON的DefinedData部分被定义为DefinedData类/模型,但DynamicData基本上是关于依赖于事物的根对象的杂项信息。如果我实际定义了所有选项,那么将有数千个选项,这将是每天维护添加新的可能性,而99%的根对象只有大约10个适用于它们。
我的最终问题是如何将API调用中的JSON字符串数据反序列化为C#动态子类,然后引用该数据。类似的东西:
Console.WriteLine(rootObject.DynamicData["dynamicField"];
或
Console.WriteLine(rootObject.DynamicData.dynamicField);