VB.net匿名类型具有来自AJAX调用的不正确的属性外壳

前端之家收集整理的这篇文章主要介绍了VB.net匿名类型具有来自AJAX调用的不正确的属性外壳前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们注意到,有时从 AJAX调用结果到控制器操作,@L_301_1@结果的情况是不正确的.如果我们重建我们的解决方案并尝试完全相同的调用,则返回的案例实际上会发生变化在下面的例子中,密钥的情况已经纠正了一年多,直到现在它已经决定根据一些看似随意的情况开始随机改变.

正如您在上图中所看到的,JSON结果的关键是小写“成功”.但是,当我在Chrome控制台中查看结果时,它是一个大写的“成功”.这导致我们的JavaScript失败,因为它正在检查小写版本.

是什么造成的?更重要的是,我们如何阻止这种情况?

vb.net不区分大小写,而不区分大小写的C#.这意味着编译器将为以下每个匿名类型生成一个类(来自第一个实例):
  1. Dim a = New With {.success = True} 'Compiler generate a class based on this type
  2. Dim b = New With {.Success = True} 'Same type as `a`
  3. Dim c = New With {.sUcCeSs = True} 'Same type as `a`
  4.  
  5. Debug.WriteLine(a.GetType().Name)
  6. Debug.WriteLine(b.GetType().Name)
  7. Debug.WriteLine(c.GetType().Name)

VB$AnonymousType_0’1
VB$AnonymousType_0’1
VB$AnonymousType_0’1

以下是编译回vb.net时编译代码的样子:

  1. <DebuggerDisplay("success={success}"),CompilerGenerated> _
  2. Friend NotInheritable Class VB$AnonymousType_0(Of T0)
  3. ' Methods
  4. <DebuggerNonUserCode> _
  5. Public Sub New(ByVal success As T0)
  6. Me.$success = success
  7. End Sub
  8.  
  9. <DebuggerNonUserCode> _
  10. Public Overrides Function ToString() As String
  11. Dim builder As New StringBuilder
  12. builder.Append("{ ")
  13. builder.AppendFormat("{0} = {1} ","success",Me.$success)
  14. builder.Append("}")
  15. Return builder.ToString
  16. End Function
  17.  
  18. Public Property success As T0
  19. <DebuggerNonUserCode> _
  20. Get
  21. Return Me.$success
  22. End Get
  23. <DebuggerNonUserCode> _
  24. Set(ByVal Value As T0)
  25. Me.$success = Value
  26. End Set
  27. End Property
  28.  
  29. Private $success As T0
  30.  
  31. End Class

猜你在找的VB相关文章