2012-04-24 74 views
1

如何从Windows中的一个休息web服务显示一个字符串形式我的XML看起来是这样的:如何在Windows窗体中显示来自其他web服务的字符串?

<string>whatever</string> 

你怎么能显示在赢形式的文本框?

如果我尝试

 string uri = string.Format("etc/{0}/{1} Sad.Text, Happy.Text"); 
     XDocument xDoc = XDocument.Load(uri); 
     string mystring = xDoc.Element("String").Value; 
     textBox1.Text = mystring; 

你得到一个对象引用错误?

+1

试试这个http://stackoverflow.com/questions/4689303/consuming-a-rest -xml-web-service – V4Vendetta 2012-04-24 12:11:48

+0

@ V4Vendetta你几乎可以做出答案 – 2012-04-24 12:13:15

+0

哈哈哈......是啊,看起来奇怪的天花板:S – 2012-04-24 12:21:44

回答

1

XML元素区分大小写。尝试,

string mystring = xDoc.Element("string").Value; 

一个更好的办法来解决这个问题是不使用XML返回一个简单的字符串。媒体类型text/plain旨在执行此操作。如果您正在使用Microsoft's ASP.NET Web API刚刚返回

return new HttpResponseMessage() { 
      Content = new StringContent("etc/{0}/{1} Sad.Text, Happy.Text") 
      }; 

,并在客户端上(使用此http://nuget.org/Packages/system.net.http)做,

var httpClient = new HttpClient(); 
textBox1.Text = httpClient.GetAsync(uri).Result.Content.ReadAsString(); 
+0

认真哈哈微软需要修复这个昏暗的情况下敏感的东西! – 2012-04-24 12:42:59

+0

@KirstyWhite你将不得不抱怨比微软更高的食物链。 XML规范将元素和属性名称定义为区分大小写。 – 2012-04-24 13:07:13

+0

@KirstyWhite谁说它坏了? – AnthonyBlake 2012-04-24 13:36:38

-2

我会使用XmlSerializer从Web服务返回的XML中获取信息。我假设你的XML只是一个字符串。对于您的简单示例,您可以这样做,但这也适用于REST Web服务返回的更复杂的对象。

XmlSerializer xs = new XmlSerializer (typeof (string)); 
MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(restResult)); 
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
string textBoxVal = xs.Deserialize(memoryStream); 
+0

这似乎很重,只是为了得到一串文字? – 2012-04-24 12:26:18

+0

那么也许你只需要'stream''ReadToEnd()',然后忽略标签:) – V4Vendetta 2012-04-24 12:28:43

+0

我建议的解决方案对于返回的任何xml都是通用的。如果你不想使用XmlSerializer,并且你总是只返回那个字符串,你可以使用Substring将它从字符串中拉出来,因为你知道标记在字符串的开始和结束处有多长。 – 2012-04-24 12:33:25

相关问题