【问题标题】:Serialization issue using JsonConvert.SerializeObject (properties missing on server)使用 JsonConvert.SerializeObject 的序列化问题(服务器上缺少属性)
【发布时间】:2012-11-19 17:28:45
【问题描述】:

我在使用 JsonConvert.SerializeObject 时遇到了非常奇怪的行为。

我有一个如下所示的方法:

public class ServiceController : ApiController
{
    public object GetJSONConnectedResponse(object input)
    {
        return JsonConvert.SerializeObject(input, Formatting.Indented,
        new JsonSerializerSettings()
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Serialize
        });
    }


    public object GetMediaGallery(int? id)
    {
        try
        {
            return GetJSONConnectedResponse(GalleryBLL.GetMediaGallery(id));
        }
        catch (Exception exc)
        {
            LogBLL.LogException(exc, HttpContext.Current.Request.RawUrl);
            return null;
        }
    }
}

如您所见,我使用 MVC Web API 作为服务应用程序,我在客户端使用 javascript 查询 ajax 类型的数据。

GetMediaGallery 方法返回一个持有者类,其结构如下:

public class MediaGalleryHolder
{
    public List<DB_Image> Images { get; set; }
    public List<string> SpinFrames { get; set; }
    public string FlyoverVideo { get; set; }
}

DB_Images 是一个复杂的实体,我通过调用存储过程将其填充到业务逻辑方法中。在这个复杂的实体上,我添加了 2 个额外的属性。

public partial class DB_Image
{
    public string FullPath { get; set; }
    public string ThumbPath { get; set; }
}

由于某种原因,在我的本地计算机上,结果正确序列化(添加了 2 个额外属性),但在服务器上,这些额外属性没有添加到结果中(我知道它们已填充,但从未序列化)。

这是某种 JSON.NET 或 MVC Web API 版本控制问题,我该如何解决或解决此问题?

任何帮助将不胜感激!

最好的,

部落84

【问题讨论】:

  • 您是否检查过您是否从服务器上的存储过程中获取数据?
  • 是的,它实际上是相同的代码,连接到同一个数据库(来自不同的服务器)。
  • 您确定安装了相同版本的 MVC 吗?您确定它是您的应用程序正在使用的那个吗?
  • 我不确定...有没有简单的方法可以查看机器上安装了哪个版本的 MVC?

标签: c# web-services asp.net-web-api json.net


【解决方案1】:

您是否尝试过在每个类上添加注释? 您可以尝试添加 [Serializable]

  [Serializable] 
  public partial class DB_Image
  {
        public string FullPath { get; set; }
        public string ThumbPath { get; set; }
  }

  [Serializable]
  public class MediaGalleryHolder
  {
       public List<DB_Image> Images { get; set; }
       public List<string> SpinFrames { get; set; }
       public string FlyoverVideo { get; set; }
  }

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 2015-08-26
    • 2010-09-14
    • 2015-08-23
    • 2011-11-15
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多