C#从Windows窗体上的文本框中获取特定字符串

C#从Windows窗体上的文本框中获取特定字符串,c#,winforms,textbox,C#,Winforms,Textbox,我写了一个程序,用户输入地址,点击链接标签,程序将把网站上的文本下载到文本框中 该代码如下所示: private void llbMap_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { var _address = txtAddress.Text + " " + txtCity.Text + " " + "NY " + txtZip.Text; txtFullAddress

我写了一个程序,用户输入地址,点击链接标签,程序将把网站上的文本下载到文本框中

该代码如下所示:

    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();
    }
var arrItems = txtWebData.Text.Split(",");
string coastmiles = "";
foreach (var item in arrItems)
{
    if(item.Contains(distancecoastmiles))
    {
        var subarr = item.Split(":");
        coastmiles = item.Last();
    }
}
当用户单击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;
var s=newJavaScriptSerializer();
var o=s.Deserialize(webData.ToString());
var值=o.距离海岸英里;

此外,您还可以从字符串中提取其他值,只需向
数据
类添加新字段。

您检索的文本是JSON。解析它的最简单方法是将其解析为JsonObject并访问
distancecoastmiles
属性

dynamic d = JObject.Parse(txtWebData.Text);

txtSomeOther.Text = d.distancecoastmiles;
参考:


请注意,JObject是的一部分,您可以使用NuGet将其添加到您的项目中。

很明显,它是一个JSON,但是如果您想使用textBox的Text属性检索它,您也可以这样做:

    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();
    }
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+版本,其中包含参考/导入文档:

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
在上生成的公共类Locathttp://jsonutils.com/ 公共属性状态为字符串 公共财产作为双重财产 公共财产作为双重财产 公共属性locationtype为字符串 公共财产距离海岸英里为双倍 公共财产最近距离纬度为双 公共财产最近距离经度为双 公共财产提升以双倍价格开始 公共属性levationEnd为整数 末级 私有子按钮11\u单击(发送者作为对象,e作为事件参数)处理按钮11。单击 '对.Net System.Web.Extensions的项目引用 '导入System.Web.Script.Serialization Dim jSerializer作为新的JavaScriptSerializer() 尺寸标准数据2= { “状态”:“确定”, “来自纬度”:40.86791, “从经度”:-73.428906, “位置类型”:“屋顶”, “距离海岸英里数”:1.7, “最近距离纬度”:40.8704815141, “最近距离经度”:-73.4612902712, “提升开始”:91.9, “提升结束”:0 } 价值 尝试 Dim o As Locat=jSerializer.反序列化(Locat)(strData2) MsgBox(o.距离海岸英里) 特例 MsgBox(例如消息) 结束尝试 端接头