# ReferenceCodec Methods

[Type overview](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/)

## CreateRecordPlaceholder(SerializerSession) {#createrecordplaceholder-orleans-serialization-session-serializersession-3327b86e}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/createrecordplaceholder-orleans-serialization-session-serializersession-3327b86e/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L211)

```csharp
public static uint CreateRecordPlaceholder(SerializerSession session)
```

Records and returns a placeholder reference id for objects which cannot be immediately deserialized.

### Parameters

- `session` (`SerializerSession`): The session.

### Returns

The placeholder reference id.

## MarkValueField(SerializerSession) {#markvaluefield-orleans-serialization-session-serializersession-ae21851a}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/markvaluefield-orleans-serialization-session-serializersession-ae21851a/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L21)

```csharp
public static void MarkValueField(SerializerSession session)
```

Indicates that the field being serialized or deserialized is a value type.

### Parameters

- `session` (`SerializerSession`): The serializer session.

## ReadReference(Reader&lt;TInput&gt;, Field) {#readreference-2-ref-orleans-serialization-buffers-reader-tinput-orleans-serializ-de1c2fbc}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/readreference-2-ref-orleans-serialization-buffers-reader-tinput-orleans-serializ-de1c2fbc/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L120)

```csharp
public static T ReadReference<T, TInput>(ref Reader<TInput> reader, Field field)
```

Reads a referenced value.

### Parameters

- `reader` (`Reader<TInput>`): The reader.
- `field` (`Field`): The field.

### Returns

The referenced value.

## ReadReference(Reader&lt;TInput&gt;, Type) {#readreference-1-ref-orleans-serialization-buffers-reader-tinput-system-type-c8d66c55}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/readreference-1-ref-orleans-serialization-buffers-reader-tinput-system-type-c8d66c55/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L132-L137)

```csharp
public static object ReadReference<TInput>(ref Reader<TInput> reader, Type fieldType)
```

Reads the reference.

### Parameters

- `reader` (`Reader<TInput>`): The reader.
- `fieldType` (`Type`): The field type.

### Returns

The referenced value.

## RecordObject(SerializerSession, object) {#recordobject-orleans-serialization-session-serializersession-object-c7f6f160}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/recordobject-orleans-serialization-session-serializersession-object-c7f6f160/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L196)

```csharp
public static void RecordObject(SerializerSession session, object value)
```

Records that an object was read or written.

### Parameters

- `session` (`SerializerSession`): The session.
- `value` (`object`): The value.

## RecordObject(SerializerSession, object, uint) {#recordobject-orleans-serialization-session-serializersession-object-uint-0de643ec}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/recordobject-orleans-serialization-session-serializersession-object-uint-0de643ec/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L204)

```csharp
public static void RecordObject(SerializerSession session, object value, uint referenceId)
```

Records that an object was read or written.

### Parameters

- `session` (`SerializerSession`): The session.
- `value` (`object`): The value.
- `referenceId` (`uint`): The reference identifier.

## TryWriteReferenceField(Writer&lt;TBufferWriter&gt;, uint, Type, Type, object) {#trywritereferencefield-1-ref-orleans-serialization-buffers-writer-tbufferwriter-2bd8395d}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/trywritereferencefield-1-ref-orleans-serialization-buffers-writer-tbufferwriter-2bd8395d/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L85-L92)

```csharp
public static bool TryWriteReferenceField<TBufferWriter>(ref Writer<TBufferWriter> writer, uint fieldId, Type expectedType, Type actualType, object value)
```

Write an object reference if `value` has already been written and has been tracked via [ReferenceCodec](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/). ///

### Parameters

- `writer` (`Writer<TBufferWriter>`): The writer.
- `fieldId` (`uint`): The field identifier.
- `expectedType` (`Type`): The expected type.
- `actualType` (`Type`): The actual type.
- `value` (`object`): The value.

### Returns

`true` if a reference was written, `false` otherwise.

## TryWriteReferenceField(Writer&lt;TBufferWriter&gt;, uint, Type, object) {#trywritereferencefield-1-ref-orleans-serialization-buffers-writer-tbufferwriter-253740c3}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/trywritereferencefield-1-ref-orleans-serialization-buffers-writer-tbufferwriter-253740c3/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L56-L63)

```csharp
public static bool TryWriteReferenceField<TBufferWriter>(ref Writer<TBufferWriter> writer, uint fieldId, Type expectedType, object value)
```

Write an object reference if `value` has already been written and has been tracked via [ReferenceCodec](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/).

### Parameters

- `writer` (`Writer<TBufferWriter>`): The writer.
- `fieldId` (`uint`): The field identifier.
- `expectedType` (`Type`): The expected type.
- `value` (`object`): The value.

### Returns

`true` if a reference was written, `false` otherwise.

## WriteNullReference(Writer&lt;TBufferWriter&gt;, uint) {#writenullreference-1-ref-orleans-serialization-buffers-writer-tbufferwriter-uint-cae70e37}

[Dedicated page](/orleans/docs/api/csharp/microsoft.orleans.serialization/orleans.serialization.codecs.referencecodec/methods/writenullreference-1-ref-orleans-serialization-buffers-writer-tbufferwriter-uint-cae70e37/)

[Source](https://github.com/dotnet/orleans/blob/e4e752cedecc2976811db49802c7a999b1f1c704/src/Orleans.Serialization/Codecs/ReferenceCodec.cs#L106-L109)

```csharp
public static void WriteNullReference<TBufferWriter>(ref Writer<TBufferWriter> writer, uint fieldId)
```

Writes the null reference.

### Parameters

- `writer` (`Writer<TBufferWriter>`): The writer.
- `fieldId` (`uint`): The field identifier.
