private long GetAssemblyId(WriteObjectInfo objectInfo) { //use objectInfo to get assembly string with new criteria if (_assemblyToIdTable == null) { _assemblyToIdTable = new Dictionary <string, long>(); } long assemId = 0; string assemblyString = objectInfo.GetAssemblyString(); string serializedAssemblyString = assemblyString; if (assemblyString.Length == 0) { assemId = 0; } else if (assemblyString.Equals(Converter.s_urtAssemblyString)) { // Urt type is an assemId of 0. No assemblyString needs // to be sent assemId = 0; } else { // Assembly needs to be sent // Need to prefix assembly string to separate the string names from the // assemblyName string names. That is a string can have the same value // as an assemblyNameString, but it is serialized differently bool isNew = false; if (_assemblyToIdTable.TryGetValue(assemblyString, out assemId)) { isNew = false; } else { assemId = InternalGetId("___AssemblyString___" + assemblyString, false, null, out isNew); _assemblyToIdTable[assemblyString] = assemId; } _serWriter.WriteAssembly(objectInfo._objectType, serializedAssemblyString, (int)assemId, isNew); } return(assemId); }