Serialize / deserialize an object¶
Round-trip an object graph to/from JSON or XML, files or strings, triggered when caller persists or rehydrates an object graph.
| Field | Value |
|---|---|
| Operation ID | OP-026 |
| Trigger | Caller persists or rehydrates an object graph |
| Inputs | A file path, a serialized string, or the instance to serialize |
| Outputs | T, string, or a written file |
| Primary components | SAIF.Common.Serializer` — `LoadFromJson<T>`, `SerializeToJson<T>`, `DeserializeFromJson<T>`, `LoadFromXml<T>`, `SaveToJson<T>`, `SaveToXml<T>`; plus `GenericExtensions.ToJsonString<T>` / `ToXmlString<T>` and `DotNet40Extensions.LoadFromJson<T>` / `DeserializeFromJson<T> |
| Entry point | Common/SAIF.Common/Classes/Serializer.cs |
Steps¶
- JSON paths construct a
System.Web.Script.Serialization.JavaScriptSerializer; XML paths construct aSystem.Xml.Serialization.XmlSerializer(typeof(T)). (BR-058) LoadFromJson<T>(fileName)opens aStreamReaderin ausing, reads the whole file, and deserializes toT.LoadFromXml<T>(fileName)opens aStreamReaderand deserializes withas T, returningnullon a type mismatch rather than throwing. (BR-059)SaveToJson<T>/SaveToXml<T>open aStreamWriterin ausing, write the serialized form, and callFlush()explicitly. (BR-060)SerializeToJson<T>/DeserializeFromJson<T>operate on strings with no file I/O;GenericExtensions.ToXmlString<T>serializes through an in-memoryStringWriter.- The generic constraint
where T : classapplies to every method exceptSaveToJson<T>, which is unconstrained. (BR-058)
Process flow¶
The following diagram visualizes this operation's control flow.
flowchart TD
Start(["Caller persists or rehydrates<br>an object graph"]) --> Format{"JSON or XML path?"}
Format -->|JSON| JsonSer["Construct<br>JavaScriptSerializer"]
Format -->|XML| XmlSer["Construct<br>XmlSerializer(typeof(T))"]
JsonSer --> Load
XmlSer --> Load["LoadFromJson/LoadFromXml:<br>read file, deserialize to T"]
Load --> LoadCheck{"XML result type<br>mismatch (as T)?"}
LoadCheck -->|Yes| NullReturn(["Return null"])
LoadCheck -->|No| Save
NullReturn --> Save["SaveToJson/SaveToXml: write<br>serialized form, Flush explicitly"]
Save --> StringOps["SerializeToJson/DeserializeFromJson:<br>operate on strings, no file I/O"]
StringOps --> Constraint["Generic constraint T : class<br>applies except SaveToJson<T>"]
Constraint --> End(["Object graph, string,<br>or written file returned"])
Failure and edge-case behavior¶
- No method catches exceptions. Missing files raise
FileNotFoundException; malformed payloads raise serializer exceptions; both propagate to the caller.
Related documentation¶
Sources¶
Common/SAIF.Common/Classes/Serializer.csCommon/SAIF.Common/Extensions/GenericExtensions.csCommon/SAIF.Common/Extensions/DotNet40Extensions.cs