给出以下声明:
<Extension()> Public Function ToJSON(ByVal target As Object) As String
Dim serializer = New System.Runtime.Serialization.Json.DataContractJsonSerializer(target.GetType)
Using ms As MemoryStream = New MemoryStream()
serializer.WriteObject(ms, target)
ms.Flush()
Dim bytes As Byte() = ms.ToArray()
Dim json As String = Encoding.UTF8.GetString(bytes, 0, bytes.Length)
Return json
End Using
End Function
以及测试页的页面加载中的以下行:
Dim kvp = New System.Collections.Generic.KeyValuePair(Of String, Object)(
"date", New HttpCookie("woot", "yikes")
)
Put(New HttpCookie("woot", "yikes").ToJSON)
Put(kvp.ToJSON)
Put(kvp.Value.ToJSON)
Put("here".ToJSON())
第一个Put工作得很完美,并输出以下JSON:
{"Domain":null,"Expires":"\/Date(-62135578800000-0500)\/",
"HttpOnly":false,"Name":"woot","Path":"\/",
"Secure":false,"Value":"yikes"}
然而,第二个推杆抛出了一个巨大而丑陋的错误:
'类型'System.Web.HttpCookie“具有数据协定名称”HttpCookie:
http://schemas.datacontract.org/2004/07/System.Web
第三个Put也会抛出一个错误,但完全不同:
找不到类型“HttpCookie”的公共成员“ToJSON”。
我很困惑,为什么当第一行工作时,扩展方法显然是在HttpCookie对象上找到的,为什么在第二和第三个Puts中它不工作,为什么我在这两种情况下得到不同的错误?前三个put中的每一个都在尝试做同样的事情——调用HttpCookie对象上的ToJSON扩展方法。
欢迎光临!