繁体   English   中英

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对象。 您可以定义您的自定义类:

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;

参考:

使用Json.net将JSON对象反序列化为动态对象

需要注意的是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM