相关疑难解决方法(0)

Web API 2:如何在对象及其子对象上返回带有camelCased属性名称的JSON

UPDATE

感谢所有的答案.我正在进行一个新项目,看起来我终于找到了底层:看起来下面的代码实际上应该归咎于:

public static HttpResponseMessage GetHttpSuccessResponse(object response, HttpStatusCode code = HttpStatusCode.OK)
{
    return new HttpResponseMessage()
    {
        StatusCode = code,
        Content = response != null ? new JsonContent(response) : null
    };
}
Run Code Online (Sandbox Code Playgroud)

别处...

public JsonContent(object obj)
{
    var encoded = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore } );
    _value = JObject.Parse(encoded);

    Headers.ContentType = new MediaTypeHeaderValue("application/json");
}
Run Code Online (Sandbox Code Playgroud)

假设它是WebAPI,我忽略了看似无害的JsonContent但没有.

这在任何地方都可以使用......我能说第一个,wtf吗?或许应该是"为什么他们这样做?"


原始问题如下

人们会认为这将是一个简单的配置设置,但现在我已经躲过太久了.

我看过各种解决方案和答案:

https://gist.github.com/rdingwall/2012642

似乎不适用于最新的WebAPI版本......

以下似乎不起作用 - 属性名称仍然是PascalCased.

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;

json.UseDataContractJsonSerializer = true;
json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;

json.SerializerSettings.ContractResolver …
Run Code Online (Sandbox Code Playgroud)

.net c# json.net asp.net-web-api asp.net-web-api2

95
推荐指数
5
解决办法
8万
查看次数

序列化词典时保留外壳

我有一个Web Api项目配置如下:

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
Run Code Online (Sandbox Code Playgroud)

但是,我希望字典键的外壳保持不变.是否有任何属性Newtonsoft.Json我可以使用一个类来表示我希望在序列化期间套管保持不变?

public class SomeViewModel
{
    public Dictionary<string, string> Data { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

c# json.net

80
推荐指数
3
解决办法
2万
查看次数

Web API:在操作或控制器级别配置JSON序列化程序设置

许多SO线程都涵盖了在应用程序级别覆盖Web API的默认JSON序列化程序设置.但是如何在动作级别配置其设置?例如,我可能想要在我的一个操作中使用camelcase属性进行序列化,但不能在其他操作中进行序列化.

c# json.net asp.net-web-api

29
推荐指数
2
解决办法
1万
查看次数

Json.net反序列化null guid案例

我正在使用Json.NET包含Guid类型的私有字段和该字段的公共属性的对象反序列化.当Guid我的json中的值为null时,我想分配Guid.Empty给我的字段.

public class MyClass
{
    private Guid property;
    public Guid Property
    {
        get { return property; }
        set 
        {
            if (value == null)
            {
                property = Guid.Empty;
            }
            else
            {
                property = value;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是deserializer想要访问私有字段,导致我在尝试反序列化时遇到此错误:

将值{null}转换为类型'System.Guid'时出错.路径'[0] .property',第6行,第26位.

如何让它忽略私有字段并使用公共属性呢?

c# serialization json json.net

8
推荐指数
1
解决办法
8898
查看次数

是否可以将Json.Net设置为忽略$ type?

在json反序列化攻击中观看此视频,它显示了这一点json,可用于在任何反序列化它的应用程序上触发任意代码执行.

使用ObjectDataProvider执行任意代码

现在在我的应用程序中,我甚至从未使用过类型的json.我总是反序列化为动态对象或JObjects.在$type今天早上另一次无关的谈话之前,我甚至都不知道这个房产.

在我的json设置中是否有一种方法可以告诉它永远不会写或读取此属性?这不是我想要的东西.

c# json json.net

6
推荐指数
1
解决办法
1742
查看次数

从Angularjs服务调用时,在WebApi中对延迟加载的nHibernate对象进行JsonSerializationException

我从Angularjs服务调用WebApi控制器Get方法.

角度服务:

app.service('MyService', ['$http', function ($http) {

    var getMyObjects = function () {
        var myObjects;
        var promise = $http.get('/api/objects/').success(function (data) {
            myObjects = data;
         }).error(function (data, status, headers, config) {

         });

         return promise;
    };

    return {
        myObjects: myObjects
    };
}]);
Run Code Online (Sandbox Code Playgroud)

WebApi Get方法:

public class ObjectsController : ApiController
{
    public IEnumerable<MyObject> Get()
    {
        return _objectRepository.GetAll().ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

500 server error在客户端获得了一个,其内部例外是:

ExceptionMessage: "Error getting value from 'IdentityEqualityComparer' on 
'NHibernate.Proxy.DefaultLazyInitializer'."
ExceptionType: "Newtonsoft.Json.JsonSerializationException"
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?

编辑: 我通过添加以下一个班轮来解决上述异常,WebApiConfig.cs根据这个答案:

((DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.
                           ContractResolver).IgnoreSerializableAttribute …
Run Code Online (Sandbox Code Playgroud)

nhibernate json asp.net-web-api angularjs

5
推荐指数
1
解决办法
4411
查看次数

JSON反序列化 - 字符串自动转换为Int

当我将JSON取消病毒化到下面的C#对象时,无论是显式地使用Newtonsoft还是通过ASP.NET Web Api的模型绑定机制,字符串id值都会自动转换为int.我希望它会抛出异常或引发错误,因为存在类型不匹配.这是JSON应该如何在规范中工作?如果没有,我该如何防止这种自动转换?

JSON:{"id":"4", "name":"a"} C#模型:int id; string name

c# asp.net-mvc json json.net asp.net-web-api

5
推荐指数
2
解决办法
1万
查看次数

强制 JObject 以“dd-mm-yyyy”格式序列化日期

public Guid AddJobs(JObject parametrs)
{
        dynamic jsonParameters = parametrs;
        JobViewModel job = jsonParameters.Job.ToObject<JobViewModel>();
}
Run Code Online (Sandbox Code Playgroud)

以上是我的代码。我正在尝试使用上述方法反序列化此模型。问题是它一直给我一个例外,即日期格式不正确,因为它不期望“dd-mm-yyyy”。请帮我解决这个问题。

.net c# json.net deserialization

4
推荐指数
1
解决办法
2618
查看次数

在自定义 json 转换器中访问 .NET 类的自定义属性

在我的项目中,我编写了一个自定义 json 转换器来修剪 string 属性中存在的空格。

这是我们将使用的典型类的示例,

public class Candidate
{
    public string CandidateName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的自定义 json 转换器

public class StringSanitizingConverter : JsonConverter
{       
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(string);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue , JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.String)
            if (reader.Value != null)
            {
                string sanitizedString = (reader.Value as string).Trim();

                if (StringSanitizeOptions.HasFlag(StringSanitizeOptions.ToLowerCase))
                    sanitizedString = sanitizedString.ToLowerInvariant();

                return sanitizedString;
            }

        return reader.Value;
    }

    public override void …
Run Code Online (Sandbox Code Playgroud)

json.net asp.net-web-api

4
推荐指数
1
解决办法
532
查看次数

Json.Net 反序列化为 C# 派生类

Json.Net没有将其接收到的对象反序列化为我的 Control 类的正确派生类。(请参阅以下对该问题的解释。另请注意,我认为这是解释该问题所需的最少代码量。提前感谢您审阅此问题。)

我正在尝试将以下类序列化为 JSON 或从 JSON 反序列化。

public class Page {
    public Guid Id { get; set; }
    public Guid CustomerId { get; set; }
    public IList<Control> Controls { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是 Control 类:

public class Control : ControlBase
{
    public override Enums.CsControlType CsControlType { get { return Enums.CsControlType.Base; } }
}
Run Code Online (Sandbox Code Playgroud)

这是 ControlBase 抽象类:

public abstract class ControlBase
{
    public Guid Id { get; set; }

    public virtual Enums.CsControlType CsControlType { get; }

    public …
Run Code Online (Sandbox Code Playgroud)

c# serialization json json.net asp.net-web-api

1
推荐指数
1
解决办法
3803
查看次数