【问题标题】:JSON.Net errors when deserializing data posted from AngularJS反序列化从 AngularJS 发布的数据时出现 JSON.Net 错误
【发布时间】:2013-11-01 20:10:12
【问题描述】:

我有一个很长的表单,有大约 9 对左右的单选按钮,由 AngularJS 绑定。它们看起来像这样:

 <input type="radio" name="didPay" data-ng-model="model.didPay" value="True" /> 
 <input type="radio" name="didPay" data-ng-model="model.didPay" value="False" />

通过使用浏览器开发工具,我可以看到默认情况下 model.didPay 设置为“{ }”,我猜测是为了防止绑定的单选按钮出现意外的默认选择。如果我单击一个选项,然后手动将 model.didPay 的值设置为“{}”,它实际上会将选择重置为原始状态。到目前为止一切顺利。

我的问题是一些单选按钮根据之前的选择被隐藏了,所以在最好的情况下,我会将这些单选按钮中的至少 3 个左右作为“{}”发布到服务器。

在服务器端,我有 WebApi 和 JSON.Net 进行反序列化。反序列化时,JSON.Net 抛出错误:

Exception {"Error reading string. Unexpected token: StartObject. Path 'didPay', line 1, position 91."}  
System.Exception {Newtonsoft.Json.JsonReaderException}

我希望通过将目标变量设置为字符串,如果 JSON.Net 遇到“{ }”,它有望分配 null 或空字符串。但是,情况并非如此,因为它在遇到新对象而不是字符串时会正确出错。

我的问题是:人们在 POST 数据时如何处理这个 AngularJS 单选按钮行为?关于如何让 JSON.Net 将该值序列化为有用的东西的任何想法?

如果需要,很高兴提供更多详细信息。

其他详情:

我有一个模型,例如 didPay 是一个布尔值?属性和一个视图模型,它被映射为一个字符串。

public class Model
{
    public bool? DidPay { get; set; }
    // rest of the props
}

public class ViewModel
{
    public string DidPay { get; set; }
    // rest of them props
}

我的 WebApi 控制器将 viewmodel 作为参数并执行模型绑定魔术:

public HttpResponseMessage Post(ViewModel data)
{
    var mappedData = Mapper.Map<ViewModel, Model>(data);
    // save the data
    // return response
}

Kiran 的建议给了我一个想法。我将 ViewModel 的属性类型更改为 object,现在它不再抱怨反序列化。所以这是解决了一个问题。我当前的问题是使用 Automapper 将 JObject 映射到 Nullable&lt;bool&gt;。我希望这是一件容易配置的事情。

【问题讨论】:

    标签: forms angularjs asp.net-web-api json.net


    【解决方案1】:

    尝试使用 DeserializeObject 将 json 对象(字符串)转换为 .net 对象的类型。

    示例:将 json 字符串对象转换为 Dictionary 对象。

    Dictionary<string, object> result = JsonConvert.DeserializeObject<Dictionary<string, object>>(strJsonresults);
    

    【讨论】:

    • 这给了我一个想法。将接收类型更改为对象,Json.Net 能够进行反序列化,WebApi 的模型绑定器能够绑定到模型。感谢您的建议!
    【解决方案2】:

    Automapper 自定义类型转换器成功了。

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多