【发布时间】:2020-12-01 22:27:34
【问题描述】:
我有一个需求,我的几个同事的配置文件要用PropertyGrid控件统一显示,我参考下面的帖子实现了:https://www.codeproject.com/Articles/193462/Using-PropertyGrid-to-Display-and-Edit-Dynamic-Obj。
我的方法是:先定义一个ConfigObject对象,然后使用JsonConvert.Convert(Newtonsoft.Json)将json配置文件反序列化成ConfigObject对象,然后赋值给PropertyGrid.SelectedObject。但是这样我只能显示和编辑一层嵌套的json对象,如果嵌套结构多于两层,那么嵌套的属性字段就无法编辑了。
考虑以下两级 JSON 结构:
{
"DAMultiCast": "18:80:c2:00:00:0e",
"SA": "18:60:24:A8:77:FF",
"gPTPType": "0x88f7",
"AVTPType": "0x22f0",
"Initial": {
"SyncMessageType": "0x10",
"FollowupMessageType": "0x18",
"ReqMessageType": "0x12",
"RespMessageType": "0x13",
"RespFollowupMessageType": "0x1A",
"versionPTP": "0x02",
"SyncMessagelength": "44",
"FollowupMessagelength": "76",
"ReqMessagelength": "54",
"subdomainnumber": "0",
"resv0": "0x00",
"Syncflagfield": "0x0208",
"Followupflagfield": "0x0008",
"correctionField": "00:00:00:00:00:00:00:00",
"resv1": "00:00:00:00",
"SyncClockIdentity": "01:02:03:ff:fe:46:76:34",
"RespClockIdentity": "00:22:97:ff:fe:80:0d:f2",
"sourcePortId": "0x0001",
"sequenceId": "143",
"SyncControlField": "0",
"FollowupControlField": "2",
"DelayReqControlField": "5",
"logMessagePeriod": "-3",
"tlvType": "3",
"lengthField": "28",
"organizationId": "32962",
"organizationSubType": "1",
"cumulativeScaledRateOffset": "0",
"gmTimeBaseIndicator": "0",
"lastGmPhaseChange": "00:00:00:00:00:00:00:00:00:00:00:00",
"scaledLastGmFreqChange": "0",
"requestingPortIdentity": "01:02:03:ff:fe:46:76:34",
"requestingPortId": "1"
},
"TM1_TG1_6.1.1B": {
"WaitTime1": "10",
"WaitTime2": "2"
}
}
【问题讨论】:
-
顺便说一句:嵌套的 JSON 属性字段在 PropertyGrid 控件中显示为 Collections,单击 [...] 时会显示 JToken Collection 编辑器。
标签: c# json winforms propertygrid dynamicobject