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;
}