Blazor-Diagrams / Blazor.Diagrams

A fully customizable and extensible all-purpose diagrams library for Blazor
https://blazor-diagrams.zhaytam.com
MIT License
1.01k stars 205 forks source link

About Serialization #396

Open kobeliu9527 opened 10 months ago

kobeliu9527 commented 10 months ago

Can it be serialized now? Saving it to a database is a common requirement, will it be implemented? Thank you for providing such a powerful library. If serialization could be implemented, that would be great. Looking forward to it! "System. Text. Json" is much more powerful than before

JAzevedoDev commented 10 months ago

That would be really good

peterharding93 commented 5 months ago

I am also interested in this. I have written my own implementation which seems to work great, but has involved quite a bit of code writing and is possibly overkill. I'm about two write my third implementation for a more complex system but I am surprised I can't find any examples. Here is roughly what I have done: All the elements in my diagram are customized by inheriting from NodeModel, PortModel, LinkModel. I added a virtual methods GetSaveState() LoadSaveState() which emit/consume a POCO / DTO object hierarchy representing the diagram. That is, I am making a complete clone of all the state information I want to persist. This class is sufficiently simple to serialized to JSON, or EF Core, or XML.
My actual model is quite complicated - quite a few concrete nodes, links and ports which are built from a hierarchy of abstract nodes links and ports. The serialization seems to work okay so far, but I'm still keen to see if there is a smarter way.

MPapst commented 5 months ago

Just my thoughts about serialization: A mapper should be able to handle all your cases, mapping from and to NodeModels. In addition it would leave absolutely no room for abstraction on your persistance layer.

Serializing Node Models would break the boundaries between architecture levels of every application. Depending of the technology used to transfer Data from and to the blazor app, it could also be incompatible with default serialization (think of gRPC).