[英]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
对象。 您可以定义您的自定义类:
internal class Data
{
public float distancecoastmiles;
}
并将该字符串反序列化为对象:
var s = new JavaScriptSerializer();
var o = s.Deserialize<Data>(webData.ToString());
var value = o.distancecoastmiles;
另外,您可以从字符串中提取其他值,只需将新字段添加到Data
类即可。
好吧,它显然是JSON,但是如果您想使用textBox的Text属性来检索它,也可以这样进行:
var arrItems = txtWebData.Text.Split(",");
string coastmiles = "";
foreach (var item in arrItems)
{
if(item.Contains(distancecoastmiles))
{
var subarr = item.Split(":");
coastmiles = item.Last();
}
}
您要检索的文本是JSON。 解析它的最简单方法是将其解析为JsonObject并访问distancecoastmiles
属性。
dynamic d = JObject.Parse(txtWebData.Text);
txtSomeOther.Text = d.distancecoastmiles;
参考:
需要注意的是JObject是部分Json.Net ,您可以添加使用的NuGet项目。
这是VB.Net 4.5+版本,其中记录了参考/导入:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.