MCPcopy Create free account
hub / github.com/apache/fory / Read

Method Read

csharp/src/Fory/Serializer.cs:99–146  ·  view source on GitHub ↗

Reads ref metadata and optional type metadata, then delegates to . Read context. Ref handling mode. Whether type metadata should be read. Decoded value.

(ReadContext context, RefMode refMode, bool readTypeInfo)

Source from the content-addressed store, hash-verified

97 /// <param name="readTypeInfo">Whether type metadata should be read.</param>
98 /// <returns>Decoded value.</returns>
99 public virtual T Read(ReadContext context, RefMode refMode, bool readTypeInfo)
100 {
101 if (refMode != RefMode.None)
102 {
103 RefFlag flag = context.RefReader.ReadRefFlag(context.Reader);
104 switch (flag)
105 {
106 case RefFlag.Null:
107 return DefaultValue;
108 case RefFlag.Ref:
109 {
110 uint refId = context.RefReader.ReadRefId(context.Reader);
111 return context.RefReader.GetRef<T>(refId);
112 }
113 case RefFlag.RefValue:
114 {
115 uint reservedRefId = context.RefReader.ReserveRefId();
116 context.SetReservedRefId(reservedRefId);
117 try
118 {
119 if (readTypeInfo)
120 {
121 context.TypeResolver.ReadTypeInfo(this, context);
122 }
123
124 T value = ReadData(context);
125 context.StoreRef(value);
126 return value;
127 }
128 finally
129 {
130 context.ClearReservedRefId();
131 }
132 }
133 case RefFlag.NotNullValue:
134 break;
135 default:
136 throw new RefException($"invalid ref flag {(sbyte)flag}");
137 }
138 }
139
140 if (readTypeInfo)
141 {
142 context.TypeResolver.ReadTypeInfo(this, context);
143 }
144
145 return ReadData(context);
146 }
147}

Callers

nothing calls this directly

Calls 7

ReadRefIdMethod · 0.80
SetReservedRefIdMethod · 0.80
StoreRefMethod · 0.80
ClearReservedRefIdMethod · 0.80
ReadRefFlagMethod · 0.45
ReserveRefIdMethod · 0.45
ReadTypeInfoMethod · 0.45

Tested by

no test coverage detected