为什么我反序列化时,总是提示system.argumentnullexception

tanghuawei 2014-04-29 04:30:25

protected override WorkflowCreationContext OnGetCreationContext(object[] inputs, OperationContext operationContext, Guid instanceId, WorkflowHostingResponseContext responseContext)
{
WorkflowCreationContext creationContext = new WorkflowCreationContext();

if (operationContext.IncomingMessageHeaders.Action.EndsWith("StartWorkflow"))
{
IDictionary<string, object> arguments = (IDictionary<string, object>)inputs[1];

if (arguments != null && arguments.Count > 0)
{
foreach (KeyValuePair<string, object> pair in arguments)
{
if (pair.Value is DTOWrapper)
{
//这句执行Unwrap()时出错
creationContext.WorkflowArguments.Add(pair.Key, (pair.Value as DTOWrapper).Unwrap());
}
else
creationContext.WorkflowArguments.Add(pair.Key, pair.Value);
}
}
}
else
{
new Logger(_connectionString)
.Log((Guid)inputs[0], "Invalid Action: " + operationContext.IncomingMessageHeaders.Action);
}

responseContext.SendResponse(null, null);

return creationContext;
}


DTOWrapper类:

[Serializable]
[DataContract]
public class DTOWrapper
{
public DTOWrapper();
public DTOWrapper(object obj);

[DataMember]
public string AssemblyName { get; set; }
[DataMember]
public string Data { get; set; }
[DataMember]
public string DataType { get; set; }

public object Unwrap();
}


异常信息:

System.ArgumentNullException was unhandled by user code
HResult=-2147467261
Message=Value cannot be null.
Parameter name: type
Source=System.Runtime.Serialization
ParamName=type
StackTrace:
at System.Runtime.Serialization.XmlObjectSerializer.CheckNull(Object obj, String name)
at System.Runtime.Serialization.DataContractSerializer.Initialize(Type type, IEnumerable`1 knownTypes, Int32 maxItemsInObjectGraph, Boolean ignoreExtensionDataObject, Boolean preserveObjectReferences, IDataContractSurrogate dataContractSurrogate, DataContractResolver dataContractResolver, Boolean serializeReadOnlyTypes)
at System.Runtime.Serialization.DataContractSerializer..ctor(Type type, IEnumerable`1 knownTypes, Int32 maxItemsInObjectGraph, Boolean ignoreExtensionDataObject, Boolean preserveObjectReferences, IDataContractSurrogate dataContractSurrogate, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.DataContractSerializer..ctor(Type type, IEnumerable`1 knownTypes, Int32 maxItemsInObjectGraph, Boolean ignoreExtensionDataObject, Boolean preserveObjectReferences, IDataContractSurrogate dataContractSurrogate)
at System.Runtime.Serialization.DataContractSerializer..ctor(Type type, IEnumerable`1 knownTypes)
at System.Runtime.Serialization.DataContractSerializer..ctor(Type type)
at Achievo.ServiceManager.ServiceModel.DTOWrapper.Deserialize(Type t, String data)
at Achievo.ServiceManager.ServiceModel.DTOWrapper.Unwrap()
at Achievo.Workflow.Runtime.WorkflowRuntimeEndpoint.OnGetCreationContext(Object[] inputs, OperationContext operationContext, Guid instanceId, WorkflowHostingResponseContext responseContext)
at System.ServiceModel.Activities.Dispatcher.PersistenceContext.GetInstance(WorkflowGetInstanceContext parameters)
at System.ServiceModel.Activities.Dispatcher.DurableInstanceManager.GetInstanceAsyncResult.TryAcquire(Boolean fromCache)
at System.ServiceModel.Activities.Dispatcher.DurableInstanceManager.GetInstanceAsyncResult.HandleEndLoad(IAsyncResult result)
at System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult result)
InnerException:
...全文
1555 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanghuawei 2014-06-13
  • 打赏
  • 举报
回复
程序集的问题,跟这些没关系,谢谢各位
铜臂阿铁木 2014-05-22
  • 打赏
  • 举报
回复
<Status i:nil="true" /> 是enum? 设计enum的时候要注意给设计个默认0值,否则可能出现类似问题。
config_man 2014-05-16
  • 打赏
  • 举报
回复
pair.Value为null吧。 不过这种问题调试下不就知道了么?
tanghuawei 2014-04-29
  • 打赏
  • 举报
回复
这是Xml,需要转换为DonationRequestDto对象

<?xml version="1.0" encoding="utf-16"?>
<DonationRequestDto xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Achievo.Service.WorkFlowForm.Contract">
	<CreatedBy i:nil="true" />
	<CreatedDate i:nil="true" />
	<UpdatedBy i:nil="true" />
	<UpdatedDate i:nil="true" />
	<AmountOfFunding>88</AmountOfFunding>
	<Applicant>Administrator</Applicant>
	<ApplicantId>2</ApplicantId>
	<ApproverIdSearch>0</ApproverIdSearch>
	<ApproverNameSearch i:nil="true" />
	<ApproverNames i:nil="true" />
	<ApprovingStatus i:nil="true" />
	<Assistant>Administrator</Assistant>
	<AssistantId>2</AssistantId>
	<AssoInfo i:nil="true" />
	<AuthorId>2</AuthorId>
	<Budgeted>false</Budgeted>
	<Category>General Donation</Category>
	<DD>dd</DD>
	<DateOfRequestorOrRecipientRequest>2014-04-28T00:00:00</DateOfRequestorOrRecipientRequest>
	<DescriptionOfHowFundWillBeUsed>ddd</DescriptionOfHowFundWillBeUsed>
	<DetailedDescriptionOfType>dd</DetailedDescriptionOfType>
	<DueDiligencePerformedDate>2014-04-28T16:37:45</DueDiligencePerformedDate>
	<EditingStatus>Draft</EditingStatus>
	<Explain>false</Explain>
	<ExplanationMakingProposedDonation>dd</ExplanationMakingProposedDonation>
	<FileDescription>dd</FileDescription>
	<FormName>Donation</FormName>
	<FromFormId i:nil="true" />
	<Id>275</Id>
	<IntValueOfEditingStatus>1</IntValueOfEditingStatus>
	<Nature>AdministratorGeneral DonationNature1</Nature>
	<NatureId>1</NatureId>
	<NextDueDiligenceReviewDate>2014-04-28T16:37:45</NextDueDiligenceReviewDate>
	<OwnerId>2</OwnerId>
	<PostEvent i:nil="true" />
	<ProductBrandIds xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
		<d2p1:int>12</d2p1:int>
	</ProductBrandIds>
	<ProductBrandNames>EMLA brand</ProductBrandNames>
	<ProposeEndDateOfSupport>2014-04-28T00:00:00+08:00</ProposeEndDateOfSupport>
	<ProposeEndDateOfSupportFrom>0001-01-01T00:00:00</ProposeEndDateOfSupportFrom>
	<ProposeEndDateOfSupportTo>2014-04-30T00:00:00</ProposeEndDateOfSupportTo>
	<ProposeStartDateOfSupport>2014-04-28T00:00:00+08:00</ProposeStartDateOfSupport>
	<ProposeStartDateOfSupportFrom>0001-01-01T00:00:00</ProposeStartDateOfSupportFrom>
	<ProposeStartDateOfSupportTo>2014-04-28T00:00:00</ProposeStartDateOfSupportTo>
	<RecipientId>2</RecipientId>
	<RecipientName>ABM Hong Kong Swatow Baptist Church Community Service Association Limited, The</RecipientName>
	<Remarks>dd</Remarks>
	<RepresentationOrSuggestion i:nil="true" />
	<RequestNo>EG14000037</RequestNo>
	<RevisionNo i:nil="true" />
	<ShowStatusString i:nil="true" />
	<Sort i:nil="true" />
	<SortDir i:nil="true" />
	<SpecificIfOthers i:nil="true" />
	<Status i:nil="true" />
	<SubmitDate>2014-04-28T16:37:45.4628144+08:00</SubmitDate>
	<SubmitDateFrom>0001-01-01T00:00:00</SubmitDateFrom>
	<SubmitDateTo>0001-01-01T00:00:00</SubmitDateTo>
	<SupportingFileToAttach />
	<Urgent>Normal</Urgent>
	<UsedFundDescription i:nil="true" />
	<UserId>2</UserId>
	<WorkflowInstanceId>0</WorkflowInstanceId>
	<WorkflowName>Donation</WorkflowName>
	<WorkflowVersionId>41</WorkflowVersionId>
</DonationRequestDto>
tanghuawei 2014-04-29
  • 打赏
  • 举报
回复
我把xml打出来,貌似都有值
bdmh 2014-04-29
  • 打赏
  • 举报
回复
你先确认是那个对象为null

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧