麻烦将javascript对象映射到vb.net结构

时间:2012-02-28 21:12:49

标签: javascript vb.net

我将一对序列化对象传递给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下工作的任何想法?我知道我可以使用字典来读取名称/值对,但更喜欢使用结构。

1 个答案:

答案 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