我在 asp.net 应用程序的后端有一个类。这需要序列化为 JSON 并发送到前端。这没有问题,除了序列化。类如下所示(类名等已更改(:
public class ClassA
{
// There are some properties here that need to be serialized normally
public string Name { get; set; }
// This array needs custom serialization
public ClassB[] Objects { get; set; }
}
B类看起来像这样:
public class ClassB
{
public EnumA SomeEnum { get; set; }
}
public enum EnumA{ A = 0, B = 1, C = 2 }
我需要将其序列化为如下所示:
{"name":"someName","objects":[2,1,1,0]}
在这里,对象数组应该用 ClassB 的 someEnum 属性的数字值填充。
到目前为止,我有这个添加到 ClassA 的功能,但我觉得这应该以不同的方式完成:
public string ToJson()
{
string result = "{";
result += ""name":"" + Name + "",";
result += ""objects":[";
for (int i = 0; i < Objects.Length; i++)
{
result += (int)Objects[i].SomeEnum;
if (i < Objects.Length - 1)
result += ",";
}
result += "]}";
return result;
}
我如何以更好的方式做到这一点?我还需要将生成的 JSON 反序列化回 ClassA 对象。感谢所有帮助。
您可以使用Newtonsoft JSON。
首先,向类添加JsonProperty
属性:
public class ClassA
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("objects")]
public ClassB[] Objects { get; set; }
}
现在创建一个ClassBConverter
:
public class ClassBConverter : JsonConverter<ClassB> {
...
public override void WriteJson(JsonWriter writer, ClassB value, JsonSerializer serializer)
{
writer.WriteValue((int)value.SomeEnum);
}
public override ClassB ReadJson(JsonReader reader, Type objectType, ClassB existingValue, bool hasExistingValue, JsonSerializer serializer)
{
int i = (int)((long) reader.Value);
return new ClassB { SomeEnum = i };
}
}
然后做:
JsonConvert.(De)SerializeObject<ClassA>(yourJSONString, new ClassBConverter());