如果我不知道数据结构,如何将JSON转换为匿名对象?

时间:2019-11-14 12:26:30

标签: c# json .net-core json.net

如果我没有模型,是否可以将JSON转换为匿名对象?

这是一个带有模型的示例:

var json = "{\"firstName\": \"John Doe\", \"lastName\": \"Doe\"}";
var model = new { firstName = "", lastName = "" };
var result = JsonConvert.DeserializeAnonymousType(json, model);
//result: { firstName = John Doe, lastName = Doe }

如果我不知道示例中的数据结构,该怎么做?

问题是我实际上正在使用某些库,如果我将动态对象作为参数传递,则它不起作用。 我需要使用的方法的唯一方法是传递一个匿名对象,如:

instance.SomeMethod(new { firstName = "John", lastName = "Doe" })

4 个答案:

答案 0 :(得分:3)

您可以将dynamicDeserializeObject一起使用:

var json = "{\"firstName\": \"John Doe\", \"lastName\": \"Doe\"}";      
var result = JsonConvert.DeserializeObject<dynamic>(json);
var firstName = result.firstName;

答案 1 :(得分:1)

您可以使用dynamic类型,但是如果在Xamarin中工作,则需要包含一个名为Microsoft.CSharp的引用。

这里是例子:

var json = "{\"firstName\": \"John Doe\", \"lastName\": \"Doe\"}";

dynamic x = JsonConvert.DeserializeObject(json);

Console.WriteLine(x.firstname.ToString());

//You'll need to convert to data type especially in boolean, int, float, double

这是将object转换为json的地方:

dynamic x = new ExpandoObject();
x.param1 = "";
x.param2 = "";

string json = JsonConvert.SerializeObject(x);

答案 2 :(得分:1)

使用动态:

var json = "{\"firstName\": \"John Doe\", \"lastName\": \"Doe\"}";      
dynamic result = JsonConvert.DeserializeObject(json);

您还可以在访问该属性之前检查该属性是否存在,并使用以下代码避免崩溃:

var dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(result .ToString());
if (dictionary.ContainsKey("firstName"))  
//do something with "firstName"

希望它能起作用

答案 3 :(得分:-2)

尝试使用GSon,您应该导入依赖项