【问题标题】:Fix for no parameterless constructor defined for type of 'System.String[]' during deserialization修复了在反序列化期间没有为“System.String[]”类型定义的无参数构造函数
【发布时间】:2020-07-08 18:04:54
【问题描述】:

我无法反序列化 HttpResponseMessage 并将值存储为字符串 []。

string content = message.Content.ReadAsStringAsync().Result;
string[] result = new JavaScriptSerializer().Deserialize<string[]>(content);

我不得不从已弃用的 Type t 更改为 string[],因为 API 方法签名已更改,所以现在我收到一个错误:No parameterless constructor defined for type of 'System.String[]'。

我在网上和 stackoverflow 上都没有找到我的问题的解决方案,但我尝试使用此方法 FormatterServices.GetUninitializedObject(Type) 但是当我将结果的右手值放在括号内时,我得到一个错误: 无法从 'string[]' 转换为 'System.Type' 这是有道理的,因为我相信该方法会创建一个实例而不是“协助”反序列化。

如何正确地从反序列化的 HttpResponseMessage 中获取值作为字符串 []?

参考资料:

No parameterless constructor defined for type of 'System.String' during JSON deserialization

【问题讨论】:

  • 如果你真的需要一个数组,你可以使用List&lt;string&gt;,然后调用ToArray()
  • 这是否适用于数组,可能是因为 List 实际上是一种类型?
  • 这是因为有一个默认的、无参数的构造函数。
  • 如果您希望获得正确评论的声誉,请回答问题,否则我将回答我自己的问题 :)

标签: c# serialization


【解决方案1】:

正如 cmets 中提到的@Crowcoder,我的问题的答案是使用List&lt;string&gt;,然后调用.ToArray(),而不是string[],因为它包含一个默认的无参数构造函数。

string content = message.Content.ReadAsStringAsync().Result;
List<string> temp = new JavaScriptSerializer().Deserialize<List<string>>(content);
string[] actual = temp.ToArray();

【讨论】:

    猜你喜欢
    • 2012-03-12
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多