Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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

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声明和设置类的变量?_C#_Json_Unity3d - Fatal编程技术网

C# 有没有办法从json声明和设置类的变量?

C# 有没有办法从json声明和设置类的变量?,c#,json,unity3d,C#,Json,Unity3d,我正在尝试将一个JSON反序列化到一个类中,然后从UI中用检索到的类数据填充一个表,这样的类如下所示: var id = tableInstance.data[0]["Id"]; var name = tableInstance.data[0]["Name"]; tableInstance.data[0].Add("Age", "21"); 使用系统; [可序列化] 公共类表 { 公共字符串标题; 公共字符串[]

我正在尝试将一个JSON反序列化到一个类中,然后从UI中用检索到的类数据填充一个表,这样的类如下所示:

var id = tableInstance.data[0]["Id"];
var name = tableInstance.data[0]["Name"];

tableInstance.data[0].Add("Age", "21");
使用系统;
[可序列化]
公共类表
{
公共字符串标题;
公共字符串[]列标题;
公共数据[]数据;
}
[可序列化]
公共类数据
{
}
这是当前的JSON:

{
“职务”:“团队成员”,
“列标题”:
[
“身份证”,
“姓名”,
],
“数据”:
[
{
“Id”:“0”,
“姓名”:“约翰·多伊”,
},
{
“Id”:“1”,
“姓名”:“无名氏”,
},
]
}
您会注意到类数据是空的,如果我想捕获从JSON到
类数据的数据数组,我必须为它声明正确的变量,
字符串Id
字符串名称
,但我希望能够在运行时以动态方式生成这些变量,以便表可以接受任意数量的头和任何类型的数据结构,这是我的问题,什么方法适合这种情况

我一直在读一些文章和C#书籍,关于泛型类型、字典、动态对象(也包括ExpandoObjects)、反序列化方法等。。。但到目前为止运气不好,或者可能不知道如何正确使用它们

顺便说一句,对于反序列化,我使用JSON.NET,并用以下内容填充我的类表:
myTable=JsonConvert.DeserializeObject(jsonString),但是是的,数据将是空的。在某个时候找到的,听起来至少是我想要发生的:

当反序列化动态对象时,序列化程序首先尝试在具有匹配名称的普通.NET成员上设置JSON属性值。如果未找到具有属性名称的.NET成员,则序列化程序将调用动态对象上的SetMember


我真的希望有办法做到这一点,即使我没有得到我应该做什么的确切答案,我也会非常感激为这类事情指明正确的学习方向。谢谢大家抽出时间。

您只需将空的
数据
类替换为
字典
(或
字典
)。JSON.net将处理这个问题

因此,使用这个

[Serializable]
public class Table
{
    public string title;
    public string[] columnHeaders;
    public Dictionary<string, string>[] data;
}

您只需将空的
数据
类替换为
字典
(或
字典
)。JSON.net将处理这个问题

因此,使用这个

[Serializable]
public class Table
{
    public string title;
    public string[] columnHeaders;
    public Dictionary<string, string>[] data;
}

要做到这一点,需要知道您可以期望什么样的数据,这样您就可以对类进行适当的建模。也许一个包含T[]数据的通用表可以工作。否则,您将不知道要访问哪些(动态或非动态)属性。对于您的用例来说,也许一个简单的字典而不是数据类就足够了?一个完全运行时可扩展的数据结构并不简单。@HimBromBeere,在这种情况下并非如此,ColumnHeader和Title都可以工作,并从JSON中获取正确的数据。@GrimmReaper,是的,这最终解决了问题。我觉得有点傻,因为我实际上在数据类内部尝试了字典,而不是用一个替换另一个,但没有做到这一点。谢谢要做到这一点,需要知道您可以期望什么样的数据,这样您就可以对类进行适当的建模。也许一个包含T[]数据的通用表可以工作。否则,您将不知道要访问哪些(动态或非动态)属性。对于您的用例来说,也许一个简单的字典而不是数据类就足够了?一个完全运行时可扩展的数据结构并不简单。@HimBromBeere,在这种情况下并非如此,ColumnHeader和Title都可以工作,并从JSON中获取正确的数据。@GrimmReaper,是的,这最终解决了问题。我觉得有点傻,因为我实际上在数据类内部尝试了字典,而不是用一个替换另一个,但没有做到这一点。谢谢所以我不得不用一本字典来代替整个班级。。。这真的很有用,我不知道它会自动填充。非常感谢,它完美地解决了我的问题,并教会了我一些新的东西,感谢实践演示。所以我不得不用一本字典来代替整个课堂。。。这真的很有用,我不知道它会自动填充。非常感谢,它完美地解决了我的问题,并教会了我一些新的东西,感谢实践演示。