c# - 反序列化 JSON 问题
问题描述
我只需要反序列化从服务器返回的 JSON 字符串的一部分。下面 JSON 字符串中的“myData”部分。
我的 JSON 字符串的结构如下。
{
"data": {
"CODE": {
"someData": {
"h": "foo",
"id": "City",
"lat": "11.11111"
},
"feedMe": [
[
{
"myData": {
"item1": "a",
"item2": "b",
"item3": "c"
},
"moreData": {}
}
]
]
}
}
}
在 Unity 中有 JSONutility.FromJson 方法 https://docs.unity3d.com/ScriptReference/JsonUtility.FromJson.html
但不确定我会怎么做
1 仅将“myData”部分传递给此方法。
或者
2 反序列化整个字符串
解决方案
使用JsonUtility
there 的另一种方法是旧的SimpleJSON
,它允许您仅访问 json 的某个字段,例如
var N = JSON.Parse(the_JSON_string);
var myData = N["data"]["CODE"]["feedMe"][0][0];
var item2 = myData["item2"].Value;
通常,为您的 json 获取所需的 c# 类结构的最简单方法是始终使用json2csharp
并创建所有类[Serializable]
并删除{get; set;}
以使用字段而不是属性。像这样的东西
[Serializable]
public class SomeData
{
public string h;
public string id;
public string lat;
}
[Serializable]
public class CODE
{
public SomeData someData;
public List<List<MyData>> feedMe;
}
[Serializable]
public class MyData
{
public string item1;
public string item2;
public string item3;
}
[Serializable]
public class Data
{
public CODE CODE;
}
[Serializable]
public class RootObject
{
public Data data;
}
如果你喜欢,List<T>
你也可以使用。T[]
类名实际上并不重要,但结构和字段名必须匹配。
然后使用
var root = JsonUtility.FromJson<RootObject>(THE_JSON_STRING);
var myData = root.data.CODE.feedMe[0][0];
var item2 = myData.item2;
正如已经评论过的那样,您的数组中有一个嵌套数组..不确定这是否是有意的。
推荐阅读
- firebase - 部署 Firebase 功能时出现 Eslint 错误
- react-native - 如何使特定屏幕以横向模式显示(例如播放视频),而其他屏幕在本机反应中被锁定为纵向模式?
- qt5 - 公共插槽在 Squish 中不可见
- php - 带有 HTTP::attach 错误的 Laravel 发布文件:需要“内容”键
- cmake - 为什么 CMake 选项命令应该打开或关闭?
- spherical-coordinate - 如何从 0 到 9 波段获得笛卡尔坐标中的真实球谐函数?
- numpy - f2py 无法编译递归 fortran 函数/子例程
- python - 如何在单个请求中使用 django 信号将数据保存在(用户和配置文件)表中?
- r - read.table的for循环?
- vulkan - 对图像及其视图使用不同的 VkDevice