# GrasshopperIO.DataBase namespace

Assembly: [GrasshopperIO](https://developer.rhino3d.com/api/gh2/assembly/grasshopperio.md)

## Interfaces

- [IBinary](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.ibinary.md): Interface to enforce support for binary (de)serialization. Do not implement this interface as a 3rd party developer. If you want to read and write your data to and from a GH archive, implement [IStorable](https://developer.rhino3d.com/api/gh2/type/grasshopperio.istorable.md) instead.
- [ISml](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.isml.md): Interface to enforce support for Sml (de)serialization. Do not implement this interface as a 3rd party developer.

## Classes

- [Archive](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.archive.md): This class represents a complete file. Grasshopper2 files are essentially zip-archives containing a mixture of textual, binary and node-based entries.
- [Difference](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.difference.md): A single difference between two nodes.
- [Differences](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.differences.md): A collection of differences.
- [Item](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.item.md): Represents a single data entry in an archive. An entry is an immutable combination of name, index and data.
- [NamedList<T>](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.namedlist-1.md): An immutable list of values which have names. Note that eventhrough the collection itself is immutable, the values it contains may not be.
- [Node](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.node.md): Nodes are the main organising entities in Grasshopper IO hierarchical dictionaries. Nodes may contain any number of uniquely named items, as well as any number of uniquely named child nodes. Nodes explicitly implement the [IWriter](https://developer.rhino3d.com/api/gh2/type/grasshopperio.iwriter.md) and [IReader](https://developer.rhino3d.com/api/gh2/type/grasshopperio.ireader.md) interfaces, which is how nodes are most commonly exposed to client code. Nodes are not thread-safe, not even for reading, since lookups and the inflation of serialised child nodes modify internal state.
- [NodeMatcher](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.nodematcher.md): A class used for finding matching child-chunks. Use this if you do not wish to merely compare all chunks in an archive using their Locations.
- [ReadContext](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.readcontext.md): Shared contextual information to use used during deserialisation processes.
- [SimpleImmutableList<T>](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.simpleimmutablelist-1.md): A cheap and quick immutable list optimised for the most common use case in GrasshopperIO. Adding and indexing values is fast, removing values is slow, as is adding values to a list which in the past already had values added to it.
- [SmlWriter](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.smlwriter.md): A basic utility class for writing SML compliant text.
- [SmlWriter.SmlAttribute](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.smlwriter.smlattribute.md): A disposable attribute object. The object must be disposed when the block ends to ensure SML compliant text.
- [SmlWriter.SmlElement](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.smlwriter.smlelement.md): A disposable element object. The object must be disposed when the block ends to ensure SML compliant text.
- [Value](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.value.md): Represents a single immutable value in an archive.
- [WriteContext](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.writecontext.md): Shared contextual information to use used during serialisation processes.

## Enums

- [Compression](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.compression.md): Enumerates the possible levels of compression.
- [DataType](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.datatype.md): Enumerates all the possible types that can be stored in a GrasshopperIO.dll archive.
- [DifferenceType](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.differencetype.md): Enumerates all possible differences.
- [EqualityLevel](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.equalitylevel.md): Enumerates the possible levels to which node and item equality can be tested.

## Delegates

- [DataMethod](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.datamethod.md): Method used for operating on Byte data inside an archive.
- [ItemMethod](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.itemmethod.md): Method used for operating on items inside an archive.
- [NodeMethod](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.nodemethod.md): Method used for operating on nodes inside an archive.
- [RootMethod](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.rootmethod.md): Method used for operating on root nodes inside an archive.
- [TextMethod](https://developer.rhino3d.com/api/gh2/type/grasshopperio.database.textmethod.md): Method used for operating on Text data inside an archive.
