Repository navigation
Serialize sessionTraceData to Bindings - #7941
Conversation
…ize-sessionTraceData # Conflicts: # src/AssemblySharedInfoGenerator/AssemblySharedInfo.cs
| internal static readonly string SessionTraceDataXmlTag = "SessionTraceData"; | ||
| internal static readonly string NodeTraceDataXmlTag = "NodeTraceData"; | ||
| internal static readonly string CallsiteTraceDataXmlTag = "CallsiteTraceData"; | ||
| internal static readonly string SessionTraceDataTag = "Bindings"; |
There was a problem hiding this comment.
will changing this string break xml deserialization of session data?
There was a problem hiding this comment.
Good point. I think unfortunately, yes. LoadTraceDataFromXmlDocument will still be used for legacy dyn opening as part of DynamoCore 2.0 and it will be checking the old xml tag from the old dyns. I will revert the related changes. For the new json block bindings, I can hardcode the json block name just like the other ones. But should we also consider making a config file to store all these json property names? @ikeough
There was a problem hiding this comment.
why don't you just add an additional const and then use the json one in the json serialization and the xml one in xml deserialization...
I'm also curious did you try adding a serializer specifically for the callSiteTrace data class - or attaching a converter that class directly to json.
My preference would be to avoid adding more and more logic to this workspace converter.
|
With the changes in the PR, the serialized data currently looks like this. "Bindings": [
{
"NodeTraceData NodeId": "a36a5bdc-8c94-41e0-9247-e5cc9a9a3de7",
"CallsiteTraceData": [
{
"CallSiteID ByCurve_InClassDecl-1_InFunctionScope-1_Instance0_a36a5bdc-8c94-41e0-9247-e5cc9a9a3de7": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMC4wLjUyODUlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVFpYSnBZV3hwZW1GaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMUpsZG1sMFUyVnlkbWxqWlhNdVVHVnljMmx6ZEdWdVkyVXZVbVYyYVhSVFpYSjJhV05sY3lVeVF5VXlNRlpsY25OcGIyNGxNMFF5TGpBdU1DNDFNalUxSlRKREpUSXdRM1ZzZEhWeVpTVXpSRzVsZFhSeVlXd2xNa01sTWpCUWRXSnNhV05MWlhsVWIydGxiaVV6Ukc1MWJHd2lQZzBLUEhOMGNtbHVaMGxFSUdsa1BTSnlaV1l0TXlJK09HTmtNREJsTlRRdFpEUXpNeTAwWlRWaExUazJPV1V0WmpKa1pqQTJNbU0yWVdKaExUQXdNVEE1TkRneVBDOXpkSEpwYm1kSlJENE5DanhwYm5SSlJENHhNRGcyTlRrMFBDOXBiblJKUkQ0TkNqd3ZZVEU2VTJWeWFXRnNhWHBoWW14bFNXUStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K"
}
]
}
]I suspect we can simplify the format even further like the following but would like to gather some thoughts around this @ramramps @mjkkirschner @sharadkjaiswal : "Bindings": [
{
"NodeId": "a36a5bdc-8c94-41e0-9247-e5cc9a9a3de7",
"CallsiteTraceData": [
{
"ByCurve_InClassDecl-1_InFunctionScope-1_Instance0_a36a5bdc-8c94-41e0-9247-e5cc9a9a3de7": "PFNPQVAtRU5WOkVudmVsb3BlIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOlNPQVAtRU5DPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIgeG1sbnM6U09BUC1FTlY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiB4bWxuczpjbHI9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc29hcC9lbmNvZGluZy9jbHIvMS4wIiBTT0FQLUVOVjplbmNvZGluZ1N0eWxlPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyI+DQo8U09BUC1FTlY6Qm9keT4NCjxhMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXIgaWQ9InJlZi0xIiB4bWxuczphMT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9jbHIvbnNhc3NlbS9Qcm90b0NvcmUvUHJvdG9Db3JlJTJDJTIwVmVyc2lvbiUzRDIuMC4wLjUyODUlMkMlMjBDdWx0dXJlJTNEbmV1dHJhbCUyQyUyMFB1YmxpY0tleVRva2VuJTNEbnVsbCI+DQo8TnVtYmVyT2ZFbGVtZW50cz4xPC9OdW1iZXJPZkVsZW1lbnRzPg0KPEJhc2UtMF9IYXNEYXRhPnRydWU8L0Jhc2UtMF9IYXNEYXRhPg0KPEJhc2UtMF9EYXRhIGlkPSJyZWYtMyI+UEZOUFFWQXRSVTVXT2tWdWRtVnNiM0JsSUhodGJHNXpPbmh6YVQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0V0YVc1emRHRnVZMlVpSUhodGJHNXpPbmh6WkQwaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNUzlZVFV4VFkyaGxiV0VpSUhodGJHNXpPbE5QUVZBdFJVNURQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SWdlRzFzYm5NNlUwOUJVQzFGVGxZOUltaDBkSEE2THk5elkyaGxiV0Z6TG5odGJITnZZWEF1YjNKbkwzTnZZWEF2Wlc1MlpXeHZjR1V2SWlCNGJXeHVjenBqYkhJOUltaDBkSEE2THk5elkyaGxiV0Z6TG0xcFkzSnZjMjltZEM1amIyMHZjMjloY0M5bGJtTnZaR2x1Wnk5amJISXZNUzR3SWlCVFQwRlFMVVZPVmpwbGJtTnZaR2x1WjFOMGVXeGxQU0pvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTl6YjJGd0wyVnVZMjlrYVc1bkx5SStEUW84VTA5QlVDMUZUbFk2UW05a2VUNE5DanhoTVRwVFpYSnBZV3hwZW1GaWJHVkpaQ0JwWkQwaWNtVm1MVEVpSUhodGJHNXpPbUV4UFNKb2RIUndPaTh2YzJOb1pXMWhjeTV0YVdOeWIzTnZablF1WTI5dEwyTnNjaTl1YzJGemMyVnRMMUpsZG1sMFUyVnlkbWxqWlhNdVVHVnljMmx6ZEdWdVkyVXZVbVYyYVhSVFpYSjJhV05sY3lVeVF5VXlNRlpsY25OcGIyNGxNMFF5TGpBdU1DNDFNalUxSlRKREpUSXdRM1ZzZEhWeVpTVXpSRzVsZFhSeVlXd2xNa01sTWpCUWRXSnNhV05MWlhsVWIydGxiaVV6Ukc1MWJHd2lQZzBLUEhOMGNtbHVaMGxFSUdsa1BTSnlaV1l0TXlJK09HTmtNREJsTlRRdFpEUXpNeTAwWlRWaExUazJPV1V0WmpKa1pqQTJNbU0yWVdKaExUQXdNVEE1TkRneVBDOXpkSEpwYm1kSlJENE5DanhwYm5SSlJENHhNRGcyTlRrMFBDOXBiblJKUkQ0TkNqd3ZZVEU2VTJWeWFXRnNhWHBoWW14bFNXUStEUW84TDFOUFFWQXRSVTVXT2tKdlpIaytEUW84TDFOUFFWQXRSVTVXT2tWdWRtVnNiM0JsUGcwSzwvQmFzZS0wX0RhdGE+DQo8QmFzZS0wX0hhc05lc3RlZERhdGE+ZmFsc2U8L0Jhc2UtMF9IYXNOZXN0ZWREYXRhPg0KPC9hMTpDYWxsU2l0ZV94MDAyQl9UcmFjZVNlcmlhbGlzZXJIZWxwZXI+DQo8L1NPQVAtRU5WOkJvZHk+DQo8L1NPQVAtRU5WOkVudmVsb3BlPg0K"
}
]
}
] |
|
@QilongTang both of those look a little funny. If you remove these property names, will it be difficult these deserialize this objects? As ugly as it is, it seems this should be a series of nested objects. |
|
This is very similar to what I was just proposing to Ian on Slack. Quote: or something like this: Looks like this latter one does not seem to show up properly in swagger-ui until 3.0 though. The former is more structured: and allows for future expansion if we need to add a second value for some reason. We could theoretically combine the two, and have End Quote Looks like we already need the last one. |
|
@gregmarr I might be mistaken, but per node ID I think there can be multiple callsite bindings (atleast in DynamoRevit) @QilongTang can you confirm or deny that?, so I guess we're missing an array of bindings per node, unless the binding object can be whatever type is required. - more like the additional properties one. |
|
@mjkkirschner Yes, per node Id there can be multiple callSite bindings. That's why I put |
|
@mjkkirschner @gregmarr Updated the format to remove the property names and add "Bindings": [
{
"NodeId": "a36a5bdc-8c94-41e0-9247-e5cc9a9a3de7",
"Binding": [
{
"callSiteTraceDataId1": "callSiteTraceData1",
"callSiteTraceDataId2": "callSiteTraceData2",
},
{ Rihno binding },
{ Other binding}
]
},
{
"NodeId": "1825d7c7-a85c-4065-bafb-2b97c38a9feb",
"Binding": [
{
"callSiteTraceDataId1": "callSiteTraceData1",
"callSiteTraceDataId2": "callSiteTraceData2",
},
{ Rihno binding },
{ Other binding}
]
}
] |
|
That looks good to me. |
|
@gregmarr Do you imagine we serialize client Name in each |
|
I just noticed that there is different nesting there than I thought before. This is what I would expect with a schema of If we don't need the array there, and it's one key to one value, then it's just and |
|
@gregmarr Removed the extra array layer, I think it is not necessary right now, so it aligns with your expectation: |
|
Perfect, thanks. |
|
A follow up task https://jira.autodesk.com/browse/QNTM-870 created as part of enabling opening such JSON format in D4R. Merging. |
Purpose
QNTM-701
In Dynamo Core, Graph.JSON should have "Bindings" instead of "sessionTraceData"
This PR:
sessionTraceDataxml serialization logicbindingsserialization logic to workspace serializationDeclarations
Check these if you believe they are true
*.resxfilesReviewers
@mjkkirschner @ramramps @gregmarr
FYIs
@ikeough