C# 从 Windows 表单的文本框中获取特定字符串
C# Get a specific string from a textbox on Windows Form
我写了一个程序,用户输入一个地址,点击一个链接标签,程序就会将网站上的文本下载到一个文本框中。
该代码如下所示:
private void llbMap_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
var _address = txtAddress.Text + " " + txtCity.Text + " " + "NY " + txtZip.Text;
txtFullAddress.Text = _address.ToString();
string toolDistanceMeasuring = "https://mywebsite.net/distance/?Type=json&Token=TUdBIFN5c3RlbXM1&Address=" + _address;
WebClient wc = new WebClient();
byte[] raw = wc.DownloadData(toolDistanceMeasuring);
string webData = Encoding.UTF8.GetString(raw);
txtWebData.Text = webData.ToString();
}
当用户点击 LinkLabel 时,txtWebData 填充为:
{
"status":"OK",
"fromlatitude":40.86791,
"fromlongitude":-73.428906,
"locationtype":"ROOFTOP",
"distancecoastmiles":1.7,
"closestdistancelatitude":40.8704815141,
"closestdistancelongitude":-73.4612902712,
"elevationstart":91.9,
"elevationend":0
}
我想知道如何从该文本框中仅提取 "distancecoastmiles" 并将该数据放入另一个文本框中。有什么想法可以实现吗?
你得到一个 json
对象。您可以定义您的自定义 class:
internal class Data
{
public float distancecoastmiles;
}
并将此字符串反序列化为对象:
var s = new JavaScriptSerializer();
var o = s.Deserialize<Data>(webData.ToString());
var value = o.distancecoastmiles;
此外,您可以从字符串中提取其他值,只需将新字段添加到 Data
class。
您正在检索的文本是 JSON。解析它的最简单方法是将其解析为 JsonObject 并访问 distancecoastmiles
属性.
dynamic d = JObject.Parse(txtWebData.Text);
txtSomeOther.Text = d.distancecoastmiles;
参考:
Deserialize json object into dynamic object using Json.net
请注意,JObject 是 Json.Net 的一部分,您可以使用 NuGet 将其添加到项目中。
嗯,这显然是一个 JSON,但如果你想使用文本框的文本 属性 检索它,你也可以这样做:
var arrItems = txtWebData.Text.Split(",");
string coastmiles = "";
foreach (var item in arrItems)
{
if(item.Contains(distancecoastmiles))
{
var subarr = item.Split(":");
coastmiles = item.Last();
}
}
这是一个 VB.Net 4.5+ 版本,其中记录了 reference/import:
Public Class Locat ' generated on http://jsonutils.com/
Public Property status As String
Public Property fromlatitude As Double
Public Property fromlongitude As Double
Public Property locationtype As String
Public Property distancecoastmiles As Double
Public Property closestdistancelatitude As Double
Public Property closestdistancelongitude As Double
Public Property elevationstart As Double
Public Property elevationend As Integer
End Class
Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
'project reference to .Net System.Web.Extensions
'Imports System.Web.Script.Serialization
Dim jSerializer As New JavaScriptSerializer()
Dim strData2 = <j>
{
"status":"OK",
"fromlatitude":40.86791,
"fromlongitude":-73.428906,
"locationtype":"ROOFTOP",
"distancecoastmiles":1.7,
"closestdistancelatitude":40.8704815141,
"closestdistancelongitude":-73.4612902712,
"elevationstart":91.9,
"elevationend":0
}
</j>.Value
Try
Dim o As Locat = jSerializer.Deserialize(Of Locat)(strData2)
MsgBox(o.distancecoastmiles)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
我写了一个程序,用户输入一个地址,点击一个链接标签,程序就会将网站上的文本下载到一个文本框中。
该代码如下所示:
private void llbMap_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
var _address = txtAddress.Text + " " + txtCity.Text + " " + "NY " + txtZip.Text;
txtFullAddress.Text = _address.ToString();
string toolDistanceMeasuring = "https://mywebsite.net/distance/?Type=json&Token=TUdBIFN5c3RlbXM1&Address=" + _address;
WebClient wc = new WebClient();
byte[] raw = wc.DownloadData(toolDistanceMeasuring);
string webData = Encoding.UTF8.GetString(raw);
txtWebData.Text = webData.ToString();
}
当用户点击 LinkLabel 时,txtWebData 填充为:
{
"status":"OK",
"fromlatitude":40.86791,
"fromlongitude":-73.428906,
"locationtype":"ROOFTOP",
"distancecoastmiles":1.7,
"closestdistancelatitude":40.8704815141,
"closestdistancelongitude":-73.4612902712,
"elevationstart":91.9,
"elevationend":0
}
我想知道如何从该文本框中仅提取 "distancecoastmiles" 并将该数据放入另一个文本框中。有什么想法可以实现吗?
你得到一个 json
对象。您可以定义您的自定义 class:
internal class Data
{
public float distancecoastmiles;
}
并将此字符串反序列化为对象:
var s = new JavaScriptSerializer();
var o = s.Deserialize<Data>(webData.ToString());
var value = o.distancecoastmiles;
此外,您可以从字符串中提取其他值,只需将新字段添加到 Data
class。
您正在检索的文本是 JSON。解析它的最简单方法是将其解析为 JsonObject 并访问 distancecoastmiles
属性.
dynamic d = JObject.Parse(txtWebData.Text);
txtSomeOther.Text = d.distancecoastmiles;
参考:
Deserialize json object into dynamic object using Json.net
请注意,JObject 是 Json.Net 的一部分,您可以使用 NuGet 将其添加到项目中。
嗯,这显然是一个 JSON,但如果你想使用文本框的文本 属性 检索它,你也可以这样做:
var arrItems = txtWebData.Text.Split(",");
string coastmiles = "";
foreach (var item in arrItems)
{
if(item.Contains(distancecoastmiles))
{
var subarr = item.Split(":");
coastmiles = item.Last();
}
}
这是一个 VB.Net 4.5+ 版本,其中记录了 reference/import:
Public Class Locat ' generated on http://jsonutils.com/
Public Property status As String
Public Property fromlatitude As Double
Public Property fromlongitude As Double
Public Property locationtype As String
Public Property distancecoastmiles As Double
Public Property closestdistancelatitude As Double
Public Property closestdistancelongitude As Double
Public Property elevationstart As Double
Public Property elevationend As Integer
End Class
Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
'project reference to .Net System.Web.Extensions
'Imports System.Web.Script.Serialization
Dim jSerializer As New JavaScriptSerializer()
Dim strData2 = <j>
{
"status":"OK",
"fromlatitude":40.86791,
"fromlongitude":-73.428906,
"locationtype":"ROOFTOP",
"distancecoastmiles":1.7,
"closestdistancelatitude":40.8704815141,
"closestdistancelongitude":-73.4612902712,
"elevationstart":91.9,
"elevationend":0
}
</j>.Value
Try
Dim o As Locat = jSerializer.Deserialize(Of Locat)(strData2)
MsgBox(o.distancecoastmiles)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub