将Web客户端的字符串响应转换为数组/列表
本文关键字:数组 列表 转换 响应 Web 客户端 字符串 | 更新日期: 2023-09-27 18:29:50
我从Web客户端收到以下字符串,我想将其转换为数组、列表或xml文档,以便对其进行迭代。我曾尝试转换为Linq.XDocument.Parse(strResponse),但失败并返回错误:根级别的数据无效。第1行,位置1。
转换:
String strResponse = Encoding.UTF8.GetString( response );
XDocument xmldoc = XDocument.Parse( strResponse );
上面的strResponse看起来像:
array(3) {
[0]=>
array(5) {
["brand"]=>
string(6) "Abarth"
["range"]=>
string(3) "500"
["model"]=>
string(8) "500 1.4T"
["mm_code"]=>
string(8) "00815150"
["intro_date"]=>
string(10) "2012-01-12"
}
[1]=>
array(5) {
["brand"]=>
string(6) "Abarth"
["range"]=>
string(3) "500"
["model"]=>
string(17) "500 1.4T esseesse"
["mm_code"]=>
string(9) "008151501"
["intro_date"]=>
string(10) "2012-01-12"
}
[2]=>
array(5) {
["brand"]=>
string(6) "Abarth"
["range"]=>
string(3) "500"
["model"]=>
string(9) "500C 1.4T"
["mm_code"]=>
string(8) "00815180"
["intro_date"]=>
string(10) "2012-01-12"
}
}
当我试图将上面的响应转换为xml文档时,有人能理解为什么会出现错误吗?有什么更好的建议吗?
提前谢谢。
这看起来像JSON而不是XML,您可以尝试JSON序列化程序
您的响应是PHP数组
您可以使用Regex或其他逻辑编写自己的转换器
或者使用一些第三部分库,例如Conversive.PHPSerializationLibrary
这里有一个非常基本的解析器,可以与文本一起使用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:'temp'test.txt";
static void Main(string[] args)
{
Parse parse = new Parse(FILENAME);
List<object> results = parse.Recursion();
}
}
public class Parse
{
enum State
{
NOTHING,
GET_NAME,
GET_VALUE
}
static StreamReader reader = null;
public Parse(string filename)
{
reader = new StreamReader(filename);
}
public List<object> Recursion()
{
List<object> results = new List<object>();
char[] chr = new char[1];
State state = State.NOTHING;
Boolean exit = false;
Boolean openDoubleQuote = false;
string name = "";
string value = "";
while(reader.Read(chr, 0, 1) == 1)
{
switch (state)
{
case State.NOTHING :
switch(chr[0])
{
case '{' :
results.Add(Recursion());
break;
case ''"':
state = State.GET_NAME;
openDoubleQuote = true;
break;
}
break;
case State.GET_NAME:
switch(chr[0])
{
case ''"' :
if (openDoubleQuote == false)
{
openDoubleQuote = true;
}
else
{
state = State.GET_VALUE;
openDoubleQuote = false;
}
break;
case '}' :
exit = true;
break;
default :
if (openDoubleQuote == true)
{
name += chr[0];
}
break;
}
break;
case State.GET_VALUE:
switch(chr[0])
{
case ''"' :
if (openDoubleQuote == false)
{
openDoubleQuote = true;
}
else
{
KeyValuePair<string, string> pair = new KeyValuePair<string, string>(name, value);
results.Add(pair);
name = "";
value = "";
state = State.GET_NAME;
openDoubleQuote = false;
}
break;
default :
if (openDoubleQuote == true)
{
value += chr[0];
}
break;
}
break;
}
if (exit) break;
}
return results;
}
}
}