Look at ADO.net's DataSet: http://msdn.microsoft.com/en-us/library/ss7fbaez.aspx (emphasis mine):
The ADO.NET DataSet is a memory-resident representation of data that
provides a consistent relational programming model regardless of the
source of the data it contains. A DataSet represents a complete set of
data including the tables that contain, order, and constrain the data,
as well as the relationships between the tables.
There are several ways of working with a DataSet, which can be applied
independently or in combination. You can:
Programmatically create a DataTable, DataRelation, and Constraint within a DataSet and populate the tables with data.
Populate the DataSet with tables of data from an existing relational data source using a DataAdapter.
Load and persist the DataSet contents using XML. For more information, see Using XML in a DataSet (ADO.NET).
See http://msdn.microsoft.com/en-us/library/fx29c3yd.aspx for specifics on "Loading a DataSet from XML".
This is available by default in ADO.Net - one of the base .Net libraries, so it is immediately usable from C# without any additional dependencies. (Technically, C# is just a language - it doesn't provide any libraries.)