从存储在其他变量C#中的类型转换变量

如何解决从存储在其他变量C#中的类型转换变量

我需要从其他变量中存储的类型转换动态变量。

例如:

dynamic dynamicVar = 3;
string type = "double";
var valueConverted = (type) dynamicVar;

我知道这是行不通的,但是,有没有办法做类似的事情?

我正在接收这样的JSON:

 

       [
            {
                "name": "Parameter1","description": "Description","value": "Value","type": "string"
            },{
                "name": "Parameter1","value": false,"type": "boolean"
        
            },{
                "name": "Parameter3","value": 3,"type": "double"
            }
        ]

我需要将此json转换成这样的对象:

public class Parameters
    {
        public string Parameter1 { get; set; }

        public bool Parameter2 { get; set; }

        public double? Parameter3 { get; set; }
}

当我尝试存储Parameter3时,我收到了错误消息: 无法将Int转换为Double

解决方法

如果我对您的理解正确,那么您首先可以从your JSON生成JSON模式:

    var schema = JsonSchema.FromSampleJson("...");

然后,您可以使用NJsonSchema从中生成类。 HTH。

,

您可以使用一些reflection魔法来设置这些字段。像这样(我使用Newtonsoft Json.NET作为json库):

    class Parameters
    {
        public string Parameter1 { get; set; }
        public bool Parameter2 { get; set; }
        public double Parameter3 { get; set; }
        public override string ToString()
        {
            return $"{nameof(Parameter1)}: {Parameter1},{nameof(Parameter2)}: {Parameter2},{nameof(Parameter3)}: {Parameter3}";
        }
    }

        var json = @"     [
            {
                ""name"": ""Parameter1"",""description"": ""Description"",""value"": ""Value"",""type"": ""string""
            },{
                ""name"": ""Parameter2"",""value"": false,""type"": ""boolean""
            },{
                ""name"": ""Parameter3"",""value"": 3,""type"": ""double""
            }
        ]";

        var typeMap = new Dictionary<string,Type>
        {
            {"double",typeof(double)},{"boolean",typeof(bool)},{"string",typeof(string)},};

        var jArray = JArray.Parse(json);

        var result = new Parameters();

        var methodInfo = typeof(Newtonsoft.Json.Linq.Extensions).GetMethod("Value",1,new []{typeof(IEnumerable<JToken>)});

        foreach (var jObj in jArray)
        {
            var method = methodInfo.MakeGenericMethod(typeMap[jObj["type"].Value<string>()]);
            var value = method.Invoke(null,new[] {jObj["value"]});
            typeof(Parameters).GetProperty(jObj["name"].Value<string>())
                .SetValue(result,value);
        }
        Console.WriteLine(result); //  prints "Parameter1: Value,Parameter2: False,Parameter3: 3"

可以通过各种异常处理,缓存等方式极大地改进此代码,但是应该使您大致了解如何处理任务(如果我正确理解的话)。

此外,如果您坚持使用Json.NET lib,可以考虑将其封装在custom converter中。

,

尝试一下:

dynamic dynamicVar = 3;
var valueConverted = default(dynamicVar.GetType()); //This will set the right type
valueConverted = dynamicVar;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?