public void ReadFromDisk(string filename, TfsProject source, TfsProject target)
        {
            using (var tw = File.OpenText(filename))
            {
                var serializer = JsonSerializer.Create();
                var st         = serializer.Deserialize <List <WorkItemFieldMap2> >(new JsonTextReader(tw));
                mapping      = new Dictionary <WorkItemType, WorkItemType>();
                fieldMapping = new List <WorkItemFieldMap>();
                foreach (var item in st)
                {
                    var sourceType = source.project.WorkItemTypes[item.SourceWorkIemType];
                    var targetType = target.project.WorkItemTypes[item.TargetWorkIemType];
                    mapping[sourceType] = targetType;
                    var newFm = new WorkItemFieldMap(sourceType, targetType);
                    foreach (var fieldmap in item.MappedReferenceNames)
                    {
                        var sourceFieldDefinition = sourceType.FieldDefinitions.Cast <FieldDefinition>().First(a => a.ReferenceName == fieldmap.Key);
                        var targetFieldDefinition = targetType.FieldDefinitions.Cast <FieldDefinition>().First(a => a.ReferenceName == fieldmap.Value);
                        newFm.mapping[sourceFieldDefinition] = targetFieldDefinition;
                    }

                    fieldMapping.Add(newFm);
                }
            }
        }
        public static WorkItemTypeMap MapTypes(TfsProject source, TfsProject target)
        {
            WorkItemTypeCollection workItemTypes = target.project.WorkItemTypes;
            WorkItemTypeMap        fieldMap      = new WorkItemTypeMap();

            foreach (WorkItemType workItemTypeSource in source.project.WorkItemTypes)
            {
                List <List <string> > fieldList          = new List <List <string> >();
                List <string>         sourceList         = new List <string>();
                List <string>         targetList         = new List <string>();
                WorkItemType          workItemTypeTarget = null;
                if (workItemTypes.Contains(workItemTypeSource.Name))
                {
                    workItemTypeTarget = workItemTypes[workItemTypeSource.Name];
                }
                else if (workItemTypeSource.Name == "User Story")
                {
                    workItemTypeTarget = workItemTypes["Product Backlog Item"];
                }
                else if (workItemTypeSource.Name == "Issue")
                {
                    workItemTypeTarget = workItemTypes["Impediment"];
                }
                else
                {
                    // not automatically mapped
                    continue;
                }

                WorkItemFieldMap m = new WorkItemFieldMap(workItemTypeSource, workItemTypeTarget);
                m.GenerateDefaultMap();
                fieldMap.fieldMapping.Add(m);
                fieldMap.mapping[workItemTypeSource] = workItemTypeTarget;
            }

            return(fieldMap);
        }