相关疑难解决方法(0)

.NET - 枚举的jSON序列化为字符串

我有一个包含enum属性的类,在使用时序列化对象时JavaScriptSerializer,我的json结果包含枚举的整数值而不是它的string"name".有没有办法让枚举作为string我的json而不必创建自定义JavaScriptConverter?也许有一个属性,我可以装饰enum定义,或对象属性,?

举个例子:

enum Gender { Male, Female }

class Person
{
    int Age { get; set; }
    Gender Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

期望的json结果:

{ "Age": 35, "Gender": "Male" }
Run Code Online (Sandbox Code Playgroud)

c# asp.net enums json javascriptserializer

1088
推荐指数
22
解决办法
42万
查看次数

使用JSON.net将枚举容器序列化为字符串

您可以通过添加属性将WebAPI模型中的枚举字段序列化为字符串:

enum Size
{
    Small,
    Medium,
    Large
}

class Example1
{
    [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
    Size Size { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这将序列化为此JSON:

{
  "Size": "Medium"
}
Run Code Online (Sandbox Code Playgroud)

如何为枚举集合完成相同的操作?

class Example2
{
    IList<Size> Sizes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想序列化为这个JSON:

{
  "Sizes":
  [
    "Medium",
    "Large"
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

如何使用Json.Net反序列化枚举数组?

我有一个像这样的JSON:

[{ 
    "agencyId": "myCity",
    "road": {
    "note": "",
        "lat": "45.321",
        "lon": "12.21",
        "streetCode": "290",
        "street": "street1",
        "fromNumber": "",
        "toNumber": "",
        "fromIntersection": "",
        "toIntersection": ""
    },
    "changeTypes": ["PARKING_BLOCK", "ROAD_BLOCK"],
},]
Run Code Online (Sandbox Code Playgroud)

和这样的一个类:

public class AlertRoad : BaseAlert
{
    [JsonProperty("agencyId")]
    [JsonConverter(typeof(StringEnumConverter))]
    public AgencyType AgencyId { get; set; }

    [JsonProperty("changeTypes")]
    [JsonConverter(typeof(StringEnumConverter))]
    public ChangeType[] ChangeTypes { get; set; }

    [JsonProperty("road")]
    public Road RoadInfo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

AgencyType是枚举,AgencyId的反序列化和序列化工作.

ChangeType是另一个枚举,但ChangeTypes的反序列化和序列化不起作用.我假设原因是ChangeTypes是一个枚举值数组.

问题是:如何反序列化/序列化ChangeTypes字段,或者通常是枚举值数组?

我尝试定义自己的字段转换器,名为ChangeTypeConverter,并将StrinEnumConverter更改为ChangeTypeConverter for ChangeTypes字段,但在ReadJson函数中,reader的值为null.

public class ChangeTypeConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, …
Run Code Online (Sandbox Code Playgroud)

c# json.net windows-phone-8

19
推荐指数
2
解决办法
6051
查看次数

IEnumerable中每个项目的自定义json序列化

我正在使用 Json.NET 序列化一个具有IEnumerable枚举和DateTime. 它是这样的:

class Chart
{
    // ...
    public IEnumerable<int> YAxis { get; set; }

    public IEnumerable<State> Data { get; set; }

    public IEnumerable<DateTime> XAxis { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是我需要一个自定义JsonConverter来使枚举序列化为字符串并更改DateTime字符串格式。

我已经使用试过JsonConverter提到属性在这里,枚举和自定义IsoDateTimeConverter为已完成在这里

[JsonConverter(typeof(StringEnumConverter))]
public IEnumerable<State> Data { get; set; }

[JsonConverter(typeof(MyDateTimeConverter))]
public IEnumerable<DateTime> XAxis { get; set; }
Run Code Online (Sandbox Code Playgroud)

我希望它也适用于一个IEnumerable,但不出所料,它没有:

无法将类型为“WhereSelectArrayIterator`2[System.Int32,Model.State]”的对象转换为类型“System.Enum”。

有什么办法可以说JsonConverterAttribute适用于每个项目而不是可枚举本身?

c# json json.net

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