TFS2010:当我可以使用XamlReader反序列化时,为什么我不能使用XamlWriter.SavedeserializesDictionarypublicstaticstringGetXml(Dictionaryparameters){returnXamlWriter.Save(parameters);上面的语句返回NotSupportedException。奇怪的是我可以使用XamlReader来序列化字典。publicstaticDictionaryGetParameters(IBuildDetailbuildDetail,stringbuildDefinition){vartfsProject=buildDetail.BuildDefinition.TeamProject;varbuildServer=buildDetail.BuildServer;varbuildDef=buildServer.GetBuildDefinition(tfsProject,buildDefinition);使用(varstringReader=newStringReader(buildDef.ProcessParameters)){使用(varxmlTextReader=newXmlTextReader(stringReader)){return(Dictionary)XamlReader.Load(xmlTextReader);}}}XML:$(BuildDefinitionName)6.0.0$(Rev:.r)NeverFalseFalseFalseFalseTrueTrue6.0.0.06.0.0.BTrueC:ProgramFiles(x86)LogicNPSoftwareCryptoObfuscatorFor.Net2011R3co.exe$/XXX/Product/BuildProcess/Company.XXX.ZZZ.obproj$/XXX/Product/Company.XXX.Common我使用JetBrainsdotPeek来了解Microsoft如何为TFS2010工作流序列化和反序列化字典。对于反序列化,他们使用:Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers.DeserializeProcessParameters(stringparameterValues)对于序列化,他们使用:WorkflowHelpers.SerializeProcessParameters(IDictionaryparameterValues)程序集:Microsoft.TeamFoundation.Build.Workflow.dlli最初的问题是我在排队构建之前试图添加IBuildRequest.ProcessParameters值。privatestaticvoidSetProcessParametersForSubBuild(IBuildRequestbuildRequest,DictionaryprocessParametersForSubBuild,IBuildDefinitionbuildDefinition){varsubBuildProcessParameters=WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters);if(processParametersForSubBuild.Any()){foreach(varprocessParameterinprocessParametersForSubBuild){if(subBuildProcessParameters.ContainsKey(processParameter.Key)){subBuildProcessParameters[processParameter.Key]=processParameter.Value;}else{subBuildProcessParameters.Add(processParameter.Key,processParameter.Value);}}buildRequest.ProcessParameters=WorkflowHelpers.SerializeProcessParameters(subBuildProcessParameters);}}队列构建:varqueuedBuild=buildServer.QueueBuild(buildRequest);是否必须使用XamlReader/XamlWriter?r=newDataContractSerializer(obj.GetType());使用(varwriter=newStringWriter())使用(varstm=newXmlTextWriter(writer)){serializer.WriteObject(stm,obj);回归作家。字符串();}}publicstaticTDeserialize(此字符串序列化){varserializer=newDataContractSerializer(typeof(T));使用(varreader=newStringReader(serialized))使用(varstm=newXmlTextReader(reader)){return(T)serializer.ReadObject(stm);(credittohttps://stackoverflow.com/a/5941122/1246870)以上是C#学习教程:TFS2010:WhenIcanuseXamlReaderfordeserialization,whycannotUseXamlWriter.SavetodeserializeallDictionary共享的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击维权联系管理员删除,如有转载请注明出处:
