首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON.NET解析器*似乎*正在双重序列化我的对象

JSON.NET解析器*似乎*正在双重序列化我的对象
EN

Stack Overflow用户
提问于 2014-08-29 06:46:53
回答 3查看 9.3K关注 0票数 8

我的问题是:

这是从我的WebAPI控制器发回的响应。

代码语言:javascript
运行
复制
"[
   [
      {\"id\":\"identifier\"},
      {\"name\":\"foobar\"}
   ]
]"

注意,响应包含在引号中,所有嵌入的引号都被转义。这显然是一个问题。有没有什么我可以提供给JSON.NET序列化程序的设置来防止这种情况发生?

编辑

正如p.s.w.g在他的回答中猜测的那样,我使用的是JSON.NET的

代码语言:javascript
运行
复制
JsonConvert.SerializeObject(instance)

来执行序列化。

我这样做是因为当我构建我的自定义转换器时,我已经将它们包含在我的WepApiConfig中的JsonConvert.DefaultSettings中(显然我认为这不是问题)

我以前曾尝试将我的HttpGets的返回类型交换为“我的对象类型”,响应是我的对象的ToString() method...which的json表示,这让我知道序列化没有经过我的转换器。

将我的HttpGets的返回类型从字符串更改为“我的对象类型”,并将这些转换器直接插入到WebAPi的默认HttpConfiguration中就成功了。

代码语言:javascript
运行
复制
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new FooConverter());
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new BarConverter());

很简单。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-29 06:55:12

你可能会有类似这样的东西:

代码语言:javascript
运行
复制
public string GetFoobars()
{
    var foobars = ...
    return JsonConvert.SerializeObject(foobars);
}

在本例中,您使用Json.NET将对象序列化为字符串,然后通过将结果作为字符串返回,应用编程接口控制器将字符串序列化为JavaScript字符串文字-这将导致字符串用双引号括起来,并使字符串中的任何其他特殊字符使用反斜杠进行转义。

解决方案是简单地返回对象本身:

代码语言:javascript
运行
复制
public IEnumerable<Foobar> GetFoobars()
{
    var foobars = ...
    return foobars;
}

这将导致API控制器使用其默认设置来序列化对象,这意味着它将根据从客户端传入的参数将结果序列化为XML或JSON。

进一步阅读

  • JSON and XML Serialization in ASP.NET Web API
票数 9
EN

Stack Overflow用户

发布于 2019-06-28 17:58:52

API在发送共振之前进行序列化。示例: return Ok(yourUnSerializedObject);

不需要为你做详细的说明。

票数 0
EN

Stack Overflow用户

发布于 2020-01-18 03:20:42

检查你的属性修饰符。举个例子:

代码语言:javascript
运行
复制
  public List<Yourobjectclass> columnaLista { get; set; }

    public List<Yourobjectclass> ColumnaLista
    {
        get
        {
            return this.columnaLista;
        }
        set
        {
            this.columnaLista = value;
        }

序列化程序将添加columnaLista的所有对象,而不管名称是什么,因为您有两个带有公共修饰符的属性。

要解决此问题,必须更改属性修饰符,如下所示:

代码语言:javascript
运行
复制
      private List<Yourobjectclass> columnaLista { get; set; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25559179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档