Object 类型添加扩展方法后如何使用?

Triumph 2011-01-29 11:37:03
给 Object 类型添加了一个扩展方法,用于将对象序列化为 Json 字符串,代码如下:

Imports System.Runtime.CompilerServices

Public Module JSON
<Extension()> Public Function ToJsonString(ByVal o As Object) As String
Return Newtonsoft.Json.JsonConvert.SerializeObject(o)
End Function
End Module



在使用时,如果类型定义不是 Object ,则正常使用,否则出错。如:

Dim o As String = "aaa"
Response.Write(o.ToJsonString) '不会报错,运行正常

Dim o As Object = "aaa"
Response.Write(o.ToJsonString) '报错,提示【未找到类型“String”的公共成员“ToJsonString”。 】


请问这是什么原因?
...全文
169 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
泛型是这样定义的
<Extension()> Public Function ToJsonString(Of T)(ByVal o As T) As String
  • 打赏
  • 举报
回复
使用泛型吧,不要使用object,以免歧义。
  • 打赏
  • 举报
回复
通用的方法就必须使用object类型定义参数?泛型就是整治这个观念的!
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 triumph 的回复:]

使用泛型的方法之前试过了,不行的,一样执行到那一行时出错。

因为这是个通用的生成 JSON 串的方法,传入的对象类型事先并不知道,所以不能传入具体的类型,只能传入 Object 类型,但只有传入此类型时报错,传入其它类型都正常。
[/Quote]

其实我们看这个解释,都是定义o为object类型找理由。这就是问题根源。

改变思路(或者说对人员进行培训),让它别为将o懒惰地定义为object类型而找理由,用强类型编程习惯。
wuyq11 2011-01-30
  • 打赏
  • 举报
回复
<System.Runtime.CompilerServices.Extension> _
Private Function ToJsonString(Of T)(t As T) As String
End Function
object.ToString
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 triumph 的回复:]
使用泛型的方法之前试过了,不行的,一样执行到那一行时出错。
[/Quote]

唉,难道你使用泛型概念来编程,程序还是仍然写 Dim o As Object 吗?
Triumph 2011-01-30
  • 打赏
  • 举报
回复
而更奇怪的是,同样的代码,如果不声明成扩展方法,即把<Extension()>去掉,使用
ToJsonString(o)
的时候,o 无论是什么类型,即使是 Object 类型都可以正常运行。
Triumph 2011-01-30
  • 打赏
  • 举报
回复
使用泛型的方法之前试过了,不行的,一样执行到那一行时出错。

因为这是个通用的生成 JSON 串的方法,传入的对象类型事先并不知道,所以不能传入具体的类型,只能传入 Object 类型,但只有传入此类型时报错,传入其它类型都正常。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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