protected override IDependencyGraph Deserialize(OpenGammaFudgeContext context, IFudgeStreamReader stream, SerializationTypeMap typeMap) { string calcConfigName = null; var nodes = new List <DependencyNode>(); int edgeFrom = -1; while (stream.HasNext) { switch (stream.MoveNext()) { case FudgeStreamElement.MessageStart: break; case FudgeStreamElement.MessageEnd: return(new DependencyGraph(calcConfigName, nodes)); case FudgeStreamElement.SimpleField: switch (stream.FieldName) { case "edge": var int32 = Convert.ToInt32(stream.FieldValue); if (edgeFrom < 0) { edgeFrom = int32; } else { int to = int32; DependencyNode inputNode = nodes[edgeFrom]; DependencyNode dependentNode = nodes[to]; dependentNode.AddInputNode(inputNode); edgeFrom = -1; } break; case "calculationConfigurationName": if (calcConfigName != null) { throw new ArgumentException(); } calcConfigName = (string)stream.FieldValue; break; default: if (stream.FieldOrdinal == 0 && stream.FieldType == StringFieldType.Instance) { break; } throw new ArgumentException(); } break; case FudgeStreamElement.SubmessageFieldStart: if (stream.FieldName == "dependencyNode" && stream.FieldOrdinal == null) { var deserializeStandard = DeserializeStandard <DependencyNode>(context, stream, typeMap); nodes.Add(deserializeStandard); } else { throw new ArgumentException(); } break; case FudgeStreamElement.SubmessageFieldEnd: throw new ArgumentException(); default: break; // Unknown } } throw new ArgumentException(); }