相关疑难解决方法(0)

确保json密钥在.NET中是小写的

是否有简单的方法在.NET中使用JSON来确保密钥以小写形式发送?

目前我正在使用newtonsoft的Json.NET库并且只是使用

string loginRequest = JsonConvert.SerializeObject(auth);
Run Code Online (Sandbox Code Playgroud)

在这种情况下auth只是以下对象

public class Authority
{
    public string Username { get; set; }
    public string ApiToken { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这导致了

{"Username":"Mark","ApiToken":"xyzABC1234"}
Run Code Online (Sandbox Code Playgroud)

有没有办法确保usernameapitoken键以小写形式出现?

我不想简单地通过运行它String.ToLower(),当然,因为价值观usernameapitoken是混合的情况.

我意识到我可以以编程方式执行此操作并手动创建JSON字符串,但我需要大约20个左右的JSON数据字符串,我看到我是否可以节省一些时间.我想知道是否有任何已经构建的库允许您强制使用小写来创建密钥.

.net json json.net

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

枚举序列化Json vs XML

我在项目中关注了Enum

public enum CameraAccessMethod
{
    Manual = 0,
    Panasonic = 1,
    Axis = 2,
    AirCam = 3
}
Run Code Online (Sandbox Code Playgroud)

我有一个对象,可以根据不同的场景序列化为json或XML,对象的属性之一是类型CameraAccessMethod.我遇到的问题是,当这个属性被序列化为XML时,它将给出枚举值的字符串表示(Manual,Panasonic,Axis,Aircam),但在JSON中它被序列化为数值(0,1,2,3).我怎样才能避免这种不一致?我也希望JSON序列化中的字符串.

.net xml serialization json asp.net-web-api

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

在类属性上使用 JsonConverter 时选择 NamingStrategy

我有 ac# 类,我正在尝试使用Newtonsoft.Json. 该属性是一个枚举类型,我希望该值被序列化为“枚举名称的小写版本”。有一个JsonConverterAttribute可用于在属性上指定它,也有一个预写的,StringEnumConverter但我需要CamelCaseNamingStrategy在该转换器上指定,但我无法计算出语法。

我试图将它分配给属性本身:

public class C
{
    [JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
    public ChartType ChartType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试将它类似地添加到枚举类型本身:

[JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
public enum ChartType { Pie, Bar }
Run Code Online (Sandbox Code Playgroud)

但是语法是错误的。我在Newtonsoft 文档中找不到任何此类示例。

所需的序列化将是:"ChartType":"pie""ChartType":"bar"

有任何想法吗?谢谢。

c# json.net jsonconverter

7
推荐指数
2
解决办法
5280
查看次数

Json.NET StringEnumConverter并不总是工作

我有一个枚举:

public enum FilterOperator
    {
        [EnumMember(Value = "eq")]
        Equals,
        [EnumMember(Value = "gt")]
        GreaterThan,
        [EnumMember(Value = "lt")]
        LessThan,
        [EnumMember(Value = "in")]
        In,
        [EnumMember(Value = "like")]
        Like
    }
Run Code Online (Sandbox Code Playgroud)

以及包含枚举属性的类:

public class GridFilter
{
    [JsonProperty("operator")]
    [JsonConverter(typeof(StringEnumConverter))]
    public FilterOperator Operator { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

该对象通过WebAPI操作传入,并按预期对“ like”和“ in”进行反序列化,但不适用于“ lg”或“ gt”。知道为什么吗?

更新:好吧,“喜欢”和“从事”工作的原因是它们与枚举名称匹配。将GreaterThan重命名为Gt(etc)是可行的。因此,真正的问题是为什么不使用StringEnumConverter?

c# enums json.net

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

自动将 JsonConverter 属性应用于类型的所有属性

我的 ViewModel 中有一个用于DateTimeOffset属性的自定义 JsonConverter。我有 100 多个 ViewModel。

public class ItemViewModel 
{
  public string Name { get; set; }

  [JsonConverter(typeof(CustomDateTimeOffsetConverter))]
  public DateTimeOffset DateCreated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何将此属性应用于所有 DateTimeOffset 属性,而不将其添加到我的所有 ViewModel 中?

当我阅读此答案时,我以为我已经找到了解决方案,但是当我应用它时,CustomResolver 仅在父对象本身上触发,而不是在 DateTimeOffset 属性或任何属性上触发。

public class CustomResolver : DefaultContractResolver
{
    protected override JsonObjectContract CreateObjectContract(Type objectType)
    {
        JsonObjectContract contract = base.CreateObjectContract(objectType);
        if (objectType == typeof(DateTimeOffset))
        {
            contract.Converter = new CustomDateTimeOffsetConverter();
        }
        return contract;
    }
}
Run Code Online (Sandbox Code Playgroud)

回顾一下,我已经完成了其他所有工作。如果我手动添加该[JsonConverter(typeof(CustomDateTimeOffsetConverter))]属性,那么我的应用程序就会像魅力一样工作。我只是问如何自动添加属性,而不是手动添加。

c# json.net converters

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

使用Newtonsoft.Json时将枚举值转换为任意整数

我有一个枚举:

public enum IdleDelayBreakMode
{
    Repeat,
    ShowNext
}
Run Code Online (Sandbox Code Playgroud)

NewtonSoft.Json用来转换为包含该枚举类型的属性的json对象。将那个枚举值序列化为任意整数的最佳解决方案是什么?理想情况下,我想在下面的代码段中执行类似的操作,并且我想知道是否有内置的解决方案:

public enum IdleDelayBreakMode
{
    [JsonValue(100)]
    Repeat,             // When serializing will be converted to 100

    [JsonValue(200)]
    ShowNext            // When serializing will be converted to 200  
}
Run Code Online (Sandbox Code Playgroud)

c# json json.net

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