Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串转换为类型的自定义JSON.NET转换器_C#_Json_Json.net_Converter - Fatal编程技术网

C# 将字符串转换为类型的自定义JSON.NET转换器

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

基本上我有一个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 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”),但这不起作用。