我有一个包含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) 您可以通过添加属性将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) 我有一个像这样的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) 我正在使用 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适用于每个项目而不是可枚举本身?