C# 将字符串转换为类型的自定义JSON.NET转换器
基本上我有一个c#类,我想反序列化它,下面是这个类:C# 将字符串转换为类型的自定义JSON.NET转换器,c#,json,json.net,converter,C#,Json,Json.net,Converter,基本上我有一个c#类,我想反序列化它,下面是这个类: public class Data { public string Name{get;set;} public string Label{get;set;} public string Unit{get;set;} public int Precision{get;set;} [JsonPropertyAttribute("type")] public Type DataTyp
public class Data {
public string Name{get;set;}
public string Label{get;set;}
public string Unit{get;set;}
public int Precision{get;set;}
[JsonPropertyAttribute("type")]
public Type DataType{get;set;}
}
我的Json字符串如下所示:
{
"name": "ACCurrent",
"label": "ACCurrent",
"unit": "A",
"precision": 2,
"type": "float"
}
但是,我不知道如何编写一个自定义转换器来将“float”转换为typeof(float)。我看过文档,我想我需要在converter下使用WriteJson方法。但我不太明白我该怎么做。任何帮助都将不胜感激 我的主张是创建自定义Json转换器。请注意,此转换器将在反序列化和序列化期间使用。我只实现了反序列化
public class Data
{
public string Name { get; set; }
public string Label { get; set; }
public string Unit { get; set; }
public int Precision { get; set; }
[JsonPropertyAttribute("type")]
[JsonConverter(typeof(DataTypeConverter))]
public Type DataType { get; set; }
}
public class DataTypeConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
var value = token.Value<string>();
if (value == "float")
{
return typeof (float);
}
return null;
}
public override bool CanConvert(Type objectType)
{
throw new NotImplementedException();
}
}
公共类数据
{
公共字符串名称{get;set;}
公共字符串标签{get;set;}
公共字符串单元{get;set;}
公共整数精度{get;set;}
[JsonPropertyAttribute(“类型”)]
[JsonConverter(typeof(DataTypeConverter))]
公共类型数据类型{get;set;}
}
公共类DataTypeConverter:JsonConverter
{
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
抛出新的NotImplementedException();
}
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
JToken令牌=JToken.Load(读卡器);
var value=token.value();
如果(值=“浮动”)
{
返回类型(浮动);
}
返回null;
}
公共覆盖布尔CanConvert(类型objectType)
{
抛出新的NotImplementedException();
}
}
一些测试代码:
public static string GetJsonString()
{
return "{ \"name\": \"ACCurrent\", " +
" \"label\": \"ACCurrent\"," +
" \"unit\": \"A\"," +
" \"precision\": 2," +
" \"type\": \"float\" }";
}
[Test]
public void Deserialize_String_To_Some_Data()
{
var obj = JsonConvert.DeserializeObject<Data>(RawStringProvider.GetJsonString());
Assert.AreEqual(typeof(float), obj.DataType);
}
public静态字符串GetJsonString()
{
返回“{\”name\”:\“ACCurrent\”,“+
“\”标签\“:\”累计\“,”+
“单位:\”A\,“+
“精度”:2+
“\”类型\“:\”浮动\“}”;
}
[测试]
public void将\u字符串\u反序列化为\u某些\u数据()
{
var obj=JsonConvert.DeserializeObject(RawStringProvider.GetJsonString());
AreEqual(typeof(float),obj.DataType);
}
我尝试使用Type.GetType(“someTypeString”),但这不起作用。