我想以Json格式返回数据列表。
我正在尝试各种方法来从SerializeObject获取数据,但是我无法反序列化对象,而且我尝试从Web API向控制台应用程序获取数据。 这是我的Web API代码
public string Get()
{
List<Student> studentList = new List<Student>();
Random rand = new Random();
for (int i = 0; i < 100; i++)
{
int r = rand.Next(1, 1000);
studentList.Add(new Student
{
ID = i,
Name = "Dhruv"+i,
Rand = r
});
}
string _JsonData = JsonConvert.SerializeObject(studentList);
return _JsonData;
}
这是我的学生班
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public int Rand { get; set; }
}
现在,我尝试将这些数据导入控制台应用程序。 这是我的控制台应用程序代码。
public static void GetJsonData()
{
string jsonData = new WebClient().DownloadString("https://localhost:44374/api/GetData");
List<StudentData> item = JsonConvert.DeserializeObject<List<StudentData>>(jsonData);
foreach (var i in item)
{
Console.WriteLine("ID: " + i.ID);
Console.WriteLine("Name: " + i.Name.ToUpper());
Console.WriteLine("Rand No: "+i.Rand);
}
}
这是我的StudentData类
class StudentData
{
public int ID { get; set; }
public string Name { get; set; }
public int Rand { get; set; }
}
我遇到的错误是:
ArgumentException:无法将System.String强制转换或转换为 System.Collections.Generic.List`1 [Data_Collector.StudentData]。
这是我从Web API获取的Json。
"[{\"ID\":0,\"Name\":\"Dhruv0\",\"Rand\":52},{\"ID\":1,\"Name\":\"Dhruv1\",\"Rand\":44},{\"ID\":2,\"Name\":\"Dhruv2\",\"Rand\":118},{\"ID\":3,\"Name\":\"Dhruv3\",\"Rand\":668},{\"ID\":4,\"Name\":\"Dhruv4\",\"Rand\":142},{\"ID\":5,\"Name\":\"Dhruv5\",\"Rand\":864},{\"ID\":6,\"Name\":\"Dhruv6\",\"Rand\":150},{\"ID\":7,\"Name\":\"Dhruv7\",\"Rand\":412},{\"ID\":8,\"Name\":\"Dhruv8\",\"Rand\":515},{\"ID\":9,\"Name\":\"Dhruv9\",\"Rand\":105}]"
答案 0 :(得分:0)
正如我对您的帖子的评论中所提到的,您应该使用与反序列化的类相同的类(即使相同,为清楚起见)
对我来说,您的代码似乎正确。我怀疑您尝试反序列化的json字符串格式错误: 使用您的代码:
window.dataLayer = window.dataLayer || [];
// Measure the removal of a product from a shopping cart.
window.dataLayer.push({
'event': 'addToCart',
'ecommerce': {
'currencyCode': 'BGN',
'add': { // 'add' actionFieldObject measures.
'products': [
{
'name': product.name,
'price': product.finalPrice
}
]
}
}
});
在我这方面工作正常。确保您的jsonData的格式为:
string jsonData = JsonConvert.SerializeObject(studentList);
List<StudentData> item = JsonConvert.DeserializeObject<List<StudentData>>(jsonData);
答案 1 :(得分:0)
看着错误,它看起来像是双重序列化的问题。首先,您的方法是将集合序列化为字符串,框架正在处理默认序列化(考虑这是rest响应)。
确定问题:
解决方案:
public List<Student> Get()
{
List<Student> studentList = new List<Student>();
Random rand = new Random();
for (int i = 0; i < 100; i++)
{
int r = rand.Next(1, 1000);
studentList.Add(new Student
{
ID = i,
Name = "Dhruv"+i,
Rand = r
});
}
return studentList;
}
OR
此外,如果要从WebAPI返回数据,最好使用Request.CreateResponse(StatusCode,Objectdata);
答案 2 :(得分:0)
以下是我复制的三种方法
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public int Rand { get; set; }
}
public class StudentData
{
public int ID { get; set; }
public string Name { get; set; }
public int Rand { get; set; }
}
public static string Get()
{
List<Student> studentList = new List<Student>();
Random rand = new Random();
for (int i = 0; i < 100; i++)
{
int r = rand.Next(1, 1000);
studentList.Add(new Student
{
ID = i,
Name = "Dhruv" + i,
Rand = r
});
}
string _JsonData = JsonConvert.SerializeObject(studentList);
return _JsonData;
}
在我的主文件中,我运行了以下代码,该代码完全可以完成您的工作。无需调用必须获取json的API,而是调用方法Get()来获取json。 Get为您提供数据的序列化版本,然后反序列化为另一个类。
string jsonData = Get();
//string jsonData = "[{\"ID\":0,\"Name\":\"Dhruv0\",\"Rand\":52},{\"ID\":1,\"Name\":\"Dhruv1\",\"Rand\":44},{\"ID\":2,\"Name\":\"Dhruv2\",\"Rand\":118},{\"ID\":3,\"Name\":\"Dhruv3\",\"Rand\":668},{\"ID\":4,\"Name\":\"Dhruv4\",\"Rand\":142},{\"ID\":5,\"Name\":\"Dhruv5\",\"Rand\":864},{\"ID\":6,\"Name\":\"Dhruv6\",\"Rand\":150},{\"ID\":7,\"Name\":\"Dhruv7\",\"Rand\":412},{\"ID\":8,\"Name\":\"Dhruv8\",\"Rand\":515},{\"ID\":9,\"Name\":\"Dhruv9\",\"Rand\":105}]";
Console.WriteLine(jsonData);
List<StudentData> item = JsonConvert.DeserializeObject<List<StudentData>>(jsonData);
foreach(var i in item)
{
Console.WriteLine("ID: " + i.ID);
Console.WriteLine("Name: " + i.Name.ToUpper());
Console.WriteLine("Rand No: " + i.Rand);
}
Get()方法中的jsonData和该字符串都可以正常工作,并为您提供所需的输出。
ID: 0
Name: DHRUV0
Rand No: 52
ID: 1
Name: DHRUV1
Rand No: 44
... // hiding 2 - 7
ID: 8
Name: DHRUV8
Rand No: 515
ID: 9
Name: DHRUV9
Rand No: 105
代码没有任何问题。.唯一不起作用的是假设您的https://localhost调用可以检索json字符串。修复API后,您将可以使用这些方法。
答案 3 :(得分:-1)
//获取包含服务器返回内容的流。 流dataStream = response.GetResponseStream();
//使用StreamReader打开流以方便访问。 StreamReader reader = new StreamReader(dataStream);
//读取内容。这是JSON。 字符串responseFromServer = reader.ReadToEnd();
var data =(JObject)JsonConvert.DeserializeObject(responseFromServer); var products = data [“ Students”]。Children();
,然后是for循环。
也许您应该尝试将json对象声明为var而不是字符串。