【问题标题】:pulling a python list out of a json object and converting it to something usable in C#从 json 对象中提取 python 列表并将其转换为 C# 中可用的内容
【发布时间】:2017-06-26 18:38:18
【问题描述】:

我有一个 python 服务器,它将字符串列表作为 json 对象发送到 C# 客户端。在客户端我有这个代码来反序列化对象:

try    
{
    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    var jsonObject = serializer.DeserializeObject(sr.ReadToEnd());
    textBox4.Text = jsonObject.ToString();
}
catch (Exception e){
    textBox2.Text = e.ToString();
}

我得到的结果是:“System.Object[]”

理想情况下,我想将列表的内容放入一个数组中。

谁能指出我正确的方向?

【问题讨论】:

  • 我会推荐你​​使用 Newtonsoft.Json 库来反序列化 json 字符串。
  • 向我们展示实际 JSON 的样子。我们中的一些人不是 Python 程序员,也不知道 Python 如何呈现列表。
  • 当你在一个数组上调用ToString() 时,它会给你类型。这是预期的。在调试器中查看jsonObject 的值。这是一个数组。
  • to dcg:无法使该库正常工作,因为 visio2010 出于某种原因不会让我获得 nuget 2.12。
  • 致艾米:它的行为似乎不像一个数组,也没有出现在调试器中

标签: c# json list


【解决方案1】:

你得到了一个通用对象数组,但是我想你不想要这个并且你希望得到一个更有用的结果,所以:

使用对象的属性(例如:id、name 等)创建一个类。您可以使用this page 来自动生成类。

然后将输入反序列化为您在第一步中创建的类的对象,使用以下代码:

MyNewClass myNewClassList = serializer.Deserialize<MyNewClass>(sr.ReadToEnd());

希望对你有帮助

编辑

这是使用您在 cmets 中告诉我的新信息创建的完整示例:

var json = "[\"file0\",\"file1\",\"file2\",\"file3\",\"file4\",\"file5\"]";
var serializer = new JavaScriptSerializer();
var files = serializer.Deserialize<List<String>>(json);

【讨论】:

  • 它只是一个文件名列表,没有花哨的 id 数字或日期构成一个更大的对象。我不应该为此需要一个全新的课程。
  • @drako234 在这种情况下,您可以将 MyNewClass 更改为 List&lt;String&gt; 或使用通用对象并使用强制转换。
  • 好的,我正在这样做,但它说“非泛型方法不能与类型参数一起使用”。 List listnew = serializer.DeserializeObject>(sr.ReadToEnd());
  • @drako234 我刚刚更新了答案,我犯了一个错误:你必须使用Deserialize&lt;T&gt; 而不是DeserializeObject&lt;T&gt;
猜你喜欢
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多