Overview
The .NET SDK supports three categories of data types:
To learn how specific data types are mapped to BSON types in an App Services Schema, refer to Data Model Mapping in the Atlas App Services documentation.
.NET Types
Realm supports the following .NET data types and their nullable counterparts:
boolbyteshortintlongfloatdoubledecimalcharstringbyte[]DateTimeOffset(note: Realm convertsDateTimeOffsetvalues to UTC before storing in the database and does not store the timezone information. See Issue #1835 for more information.)GuidIList<T>, where T is any of the supported data types (see Lists)
Note
The byte, char, short, int, and long types are all stored
as 64 bit integer values within Realm.
MongoDB.Bson Types
ObjectIdDecimal128
Guid and ObjectId Properties
MongoDB.Bson.ObjectId is a MongoDB-specific 12-byte unique value, while the
built-in .NET type Guid is a 16-byte universally-unique value. Both types are
indexable, and either can be used as a
Primary Key.
Using Decimal Values
Realm supports 128-bit decimal values with the Decimal128 Bson type. When
defining a decimal type, you can use the Decimal128 Bson type or the .NET
decimal type, even though it is only a 96-bit decimal. The SDK automatically
converts between the two, although you risk losing precision or range. The
following example shows how to use both the Decimal128 Bson type and the .NET
decimal type:
public class MyClassWithDecimals { [] public ObjectId _id { get; } = ObjectId.GenerateNewId(); // Standard (96-bit) decimal value type public decimal VeryPreciseNumber { get; set; } // 128-bit Decimal128 public Decimal128 EvenMorePreciseNumber { get; set; } public Decimal128 AnotherEvenMorePreciseNumber { get; set; } // Nullable decimal or Decimal128 are supported, too public decimal? MaybeDecimal { get; set; } public Decimal128? MaybeDecimal128 { get; set; } public void DoDecimalStuff() { var myInstance = new MyClassWithDecimals(); // To store decimal values: realm.Write(() => { myInstance.VeryPreciseNumber = 1.234567890123456789M; myInstance.EvenMorePreciseNumber = Decimal128.Parse("987654321.123456789"); // Decimal128 has explicit constructors that take a float or a double myInstance.EvenMorePreciseNumber = new Decimal128(9.99999); }); } }
Realm-Specific Types
Any class that implements RealmObject or EmbeddedObject can contain a
RealmObject subclass and/or an Embedded Objects
subclass. In addition, Realm supports the following custom types: