c# - 当我们使用 JSON.Net 序列化可序列化对象时,JSON 字符串与 DatacontractJSON 序列化器不同

标签 c# wcf

我有一个类似下面的类

[Serializable]
public class sample
{
    private int m_width;
    private int m_height;
    public int Width
    {
        get
        {
            return this.m_width;
        }
        set
        {
            this.m_width = value;
        }
    }

    public int Height
    {

        get
        {
            return this.m_height;
        }
        set
        {
            this.m_height = value;
        }
    }
}

如果我使用 DataContractJsonSerializer 序列化这个类的对象,我会得到如下的 json 字符串:

{"m_height":1345,"m_width":1234}

如果我使用 Newtonsoft.Json.dll 对其进行序列化,我将得到如下所示的输出:

{"Width":1234,"Height":1345}

如果类标记为可序列化,为什么 DataContractSerializer 使用支持字段进行序列化?

有什么方法可以使用 Newtonsoft.Json.dll

实现相同的目的

最佳答案

我们有一些标记为 [Serializable] 的对象,因此可以使用传统方法对它们进行序列化,但我们需要将其干净地序列化为 JSON 以便与 Web API 一起使用。将 IgnoreSerializableAttribute 设置为 true 将阻止 Newtonsoft.Json 的行为类似于 Microsoft 的序列化程序,而只会序列化公共(public)属性。

TLDR:将此添加到 WebApiConfig.cs:

((Newtonsoft.Json.Serialization.DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.ContractResolver).IgnoreSerializableAttribute = true;

关于c# - 当我们使用 JSON.Net 序列化可序列化对象时,JSON 字符串与 DatacontractJSON 序列化器不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18314929/

相关文章:

c# - 用于查看对象详细信息的 winforms 控件

wcf - 没有 WCF 数据服务的 OData 服务

WPF + WCF + MVC + EF Web/桌面应用程序

C# - IF 语句中的变量错误

C# + DirectShow.NET = 简单的网络摄像头访问?

c# - 如何让按钮处理 OnClick 事件?

c# - 带有 Javascript 客户端的 WCF 自托管 WebSocket 服务

c# - WCF、声明、ADFS 3.0

c# - 如何避免替换 "_x0020_"的空间?

c# - 单元测试扩展方法