我正在使用JsonClassGenerator项目将Json特定转换为C#类。
这是针对我正在构建的一些中间件,以挂钩我公司已经构建的TrackVia API项目。
我正在构建我的.Net应用程序中的数据层
基本上我有一个Json结构,我需要解析它以确定我是否应该根据它在“结构”中的“canUpdate”值序列化“data”中的一个属性。
让我们从Json结构开始:
{
"structure": [
{
"name": "Updated",
"type": "datetime",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": false,
"canCreate": false
},
{
"name": "Amount",
"type": "currency",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": false,
"canCreate": false
},
{
"name": "Description",
"type": "paragraph",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": false,
"canCreate": false
},
{
"name": "Created",
"type": "datetime",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": false,
"canCreate": false
},
{
"name": "Quantity",
"type": "number",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": true,
"canCreate": true
},
{
"name": "Created By User",
"type": "user",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": false,
"canCreate": false
},
{
"name": "ID",
"type": "number",
"required": false,
"unique": true,
"canRead": true,
"canUpdate": false,
"canCreate": false
},
{
"name": "Last User",
"type": "user",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": false,
"canCreate": false
},
{
"name": "Unit_Tracker",
"type": "relationship",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": true,
"canCreate": true
},
{
"name": "Project_Materials",
"type": "relationship",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": true,
"canCreate": true
},
{
"name": "Record ID",
"type": "identifier",
"required": false,
"unique": false,
"canRead": true,
"canUpdate": false,
"canCreate": false
}
],
"data": [
{
"Updated": "2017-04-20T10:12:00.000-06:00",
"Project_Materials(id)": 404,
"Unit_Tracker(id)": 209,
"Amount": "78.18",
"Description": "1/2 in",
"Quantity": "1",
"Created By User": "By",
"Unit_Tracker": "R04-5050",
"Project_Materials": "1001755734",
"id": 772,
"Created": "2017-04-20T10:12:00.000-06:00",
"Last User": "By",
"Last User(id)": 58443,
"Created By User(id)": 58443,
"Record ID": "1/2 in"
}
],
"totalCount": 763
}
这是我需要匹配的内容。我需要将“数据”中的密钥,即“更新”与“结构”内的键值匹配,即结构 - > “name”:“Updated”然后确定“canRead”,“canUpdate”,“canCreate”的值来设置某种标志。
然后该标志将告诉Codewriter添加一行“[JsonIgnoreSerialization]”并在我的输出文本中生成一个格式化的属性,如下所示:
[JsonIgnoreSerialization]
[JsonProperty("Updated")]
public string Updated { get; set; }
我甚至没有使用过JObjects,因此我的代码目前为空,因为我不确切知道从哪里开始。
这是一个大问题的原因是因为我必须根据他们的API中的Json导出将Trackvia中的数百个表转换为我的应用程序中的C#类 - 这将需要数周的时间并且希望拥有自定义的转换工具为我构建我的C#类 - 所以它会很棒。
不寻找讲义,我愿意为自己的成功而努力需要一些指导。
答案 0 :(得分:0)
试试这个自定义类结构
public class Root
{
public List<Structure> structure;
}
public class Structure
{
public string name { get; set; }
public string type { get; set; }
public string required { get; set; }
public string unique { get; set; }
public string canRead { get; set; }
public string canUpdate { get; set; }
public string canCreate { get; set; }
}
并使用以下代码访问canUpdate
属性。
using (var stream = new StreamReader("sample.json"))
{
var rootObject = JsonConvert.DeserializeObject<Root>(stream.ReadToEnd());
int index = 0;
foreach (var structures in rootObject.structure)
{
Console.WriteLine(structures.canUpdate);
}
}
注意: sample.json包含您的JSON响应。