var myObjectList = (List<MyObject>)JsonConvert.DeserializeObject(strResponseMessage, typeof(List<MyObject>));
当JSON具有以下格式时,上面的工作是将JSON字符串反序列化为自定义对象列表
[
{
"Name": "Value"
},
{
"Name": "Value"
},
{
"Name": "Value"
},
"Name": "Value"
}
]
当格式如下时,我不知道如何做同样的事情
{
"ReturnedData" : [
{
"Name": "Value"
},
{
"Name": "Value"
},
{
"Name": "Value"
},
"Name": "Value"
}
]
}
我可以获得这样的数据
JObject information = JObject.Parse(strResponseMessage);
foreach (dynamic data in information)
{
//convert to object here
}
并且适用于Android,但似乎您无法使用某种类型的“动态”iOS,因为我收到错误:
Object type Microsoft.CSharp.RuntimeBinder.CSharpInvokeMemberBinder cannot be converted to target type: System.Object[]
我错过了将第二个JSON字符串转换为第一个字符串的步骤吗?
答案 0 :(得分:2)
如果JsonConvert是JSON.Net而不是List使用
public class MyClass {
public List<MyObject> ReturnedData { get; set; }
}
答案 1 :(得分:1)
感谢您的回复 - 我能够按照以下方式解决问题
JObject information = JObject.Parse(strResponseMessage);
string json = JsonConvert.SerializeObject(strResponseMessage["ReturnedData "]);
var myObjectList = (List<MyObject>)JsonConvert.DeserializeObject(json , typeof(List<MyObject>));
完美无缺!
答案 2 :(得分:0)
您无法在 iOS 上使用动态关键字作为禁止生成代码,因为它在此link中说明。
引用: -
无动态代码生成
由于iPhone内核阻止应用程序动态生成代码,因此iPhone上的Mono不支持任何形式的动态代码生成。
这些包括:
System.Reflection.Emit不可用。
引用: -
System.Reflection.Emit
缺少System.Reflection。发射意味着不依赖于运行时代码生成的代码将起作用。这包括:
动态语言运行时。
在动态语言运行时之上构建的任何语言。
显然从v7.2中可以看到一些支持,如link所示 - 请参阅@Rodja的回答。 - 然而 - 非常实验性且缺陷阻止其完全正常工作。
您最好的方法是处理 JObject - ,不用 - 依赖动态关键字,您就可以在 > Android 和 iOS 。