我将一对序列化对象传递给vb.net webservice。第一个映射到已知结构,因此我在webservice的参数列表中使用结构类型。第二个对象可以映射到6个以上结构中的一个。一旦两个对象都传递给Web服务,第一个对象中的字段将告诉我第二个对象使用哪个结构。
a.template = jQuery('#txtTemplate').val();
a.value1 = jQuery('#txtValue1').val();
b.var1 = jQuery('#txtVar1).val();
b.var2 = jQuery('#txtVar2).val();
Public Structure Atype
Public template as string
Public value1 as string
End Type
Public Structure Btype
Public var1 as string
Public var2 as string
End Type
Public Structure cType
Public hours as string
Public days as string
Public minutes as string
End Type
<WebMethod()>
Public Function Save(byval aData as Atype, byval miscData as object) as string
If aData.template = "b" then
'move miscData to Btype
else
'move miscData to cType
end if
我简化了这个例子的结构。在调试下查看所有内容,我正在进入webservice。 aData正确映射出来。 miscData显示名称/值对。我已经尝试将DirectCast和Ctyping对象放入正确的结构中 - 两者都失败并出现错误。 有关如何在vb.net 2.0下工作的任何想法?我知道我可以使用字典来读取名称/值对,但更喜欢使用结构。
答案 0 :(得分:0)
我尝试了本地版本,但很难让我的2.0 vb.net网络服务回复。不过,我会告诉你我的策略。我会尝试创建一个复杂的对象来返回。
另外,我认为你需要在这里使用类而不是结构。字符串很容易大于16个字节。
var message = {
yourAtype : {
value1 : jQuery('#txtValue1').val()
},
yourBType : {
var1 : jQuery('#txtVar1').val(),
var2 : jQuery('#txtVar2').val()
},
yourCType : {
hours : jQuery('#txtHours').val(),
days : jQuery('#txtDays').val(),
minutes : jQuery('#txtMinutes').val()
}
};
Public Class Atype
'Public template as string <--No longer needed
Public value1 as string
End Class
Public Class Btype
Public var1 as string
Public var2 as string
End Class
Public Class cType
Public hours as string
Public days as string
Public minutes as string
End Class
Public Class MessageType
Public myAType as Atype
Public myBType as Btype
Public myCType as cType
End Class
<WebMethod()>
Public Function Save(byval message as MessageType) as string
If Not message.myAType is Nothing
'do what you need with AType
else if Not message.myBType is Nothing
'do what you need with BType
else if Not message.myCType is Nothing
'do what you need with CType
end if