Ham*_*ita 0 c# vb.net code-conversion json-rpc
我正在尝试将 C# 代码转换为 Visual Basic。
这是 C# 代码:
public static string RequestServer1(string methodName, List<string> parameters)
{
return RequestServer(methodName, parameters.Select(p => new JValue(p)).ToList<JToken>());
}
Run Code Online (Sandbox Code Playgroud)
这是 VB.Net 代码:
Public Shared Function RequestServer(ByVal methodName As String, ByVal parameters As List(Of String)) As String
Return RequestServer(methodName, parameters.Select(Function(p) New JValue(p)).ToList())
End Function
Run Code Online (Sandbox Code Playgroud)
这里的功能是List(Of JToken):
Public Shared Function RequestServer(ByVal methodName As String, ByVal parameters As List(Of JToken)) As JToken
Dim ServerIp As String = "http://localhost:8332"
Dim UserName As String = "hama"
Dim Password As String = "hama"
Dim webRequest As HttpWebRequest = CType(webRequest.Create(ServerIp), HttpWebRequest)
webRequest.Credentials = New NetworkCredential(UserName, Password)
webRequest.ContentType = "application/json-rpc"
webRequest.Method = "POST"
Dim respVal As String = String.Empty
Dim joe As JObject = New JObject
joe.Add(New JProperty("jsonrpc", 1))
joe.Add(New JProperty("id", 1))
joe.Add(New JProperty("method", methodName))
Dim props As JArray = New JArray
For Each parameter In parameters
props.Add(parameter)
Next
joe.Add(New JProperty("params", props))
' serialize json for the request
Dim s As String = JsonConvert.SerializeObject(joe)
Dim byteArray() As Byte = Encoding.UTF8.GetBytes(s)
webRequest.ContentLength = byteArray.Length
Dim dataStream As Stream = webRequest.GetRequestStream
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim streamReader As StreamReader = Nothing
Try
Dim webResponse As WebResponse = webRequest.GetResponse
streamReader = New StreamReader(webResponse.GetResponseStream, True)
respVal = streamReader.ReadToEnd
Dim data = JsonConvert.DeserializeObject(respVal).ToString
Return data
Catch exp As Exception
Finally
If (Not (streamReader) Is Nothing) Then
streamReader.Close()
End If
End Try
Return String.Empty
End Function
Run Code Online (Sandbox Code Playgroud)
有时我需要一个列表JToken,有时我需要一个字符串列表,所以我的两种方法都可以工作。
在编译之前它显示一个错误,它不接受 Return RequestServer(methodName, parameters.Select(Function(p) New JValue(p)).ToList())
它说:
不可能将列表(JValue)转换为列表(字符串)
我在这里做错了什么?
C# 代码正在将 a 转换List(Of JValue)为 a List(of JToken),但是在将 C# 转换为 VB 时,这种转换丢失了。
如果 JValue 继承了 JToken,那么就可以使用 Enumerable.Cast将您的可枚举类型从一种类型转换为另一种类型(在调用 .ToList() 之前):
Public Shared Function RequestServer(ByVal methodName As String, ByVal parameters As List(Of String)) As String
Return RequestServer(methodName, parameters.Select(Function(p) New JValue(p)).Cast(Of JToken).ToList())
End Function
Run Code Online (Sandbox Code Playgroud)