C# 有没有办法从json声明和设置类的变量?
我正在尝试将一个JSON反序列化到一个类中,然后从UI中用检索到的类数据填充一个表,这样的类如下所示: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"); 使用系统; [可序列化] 公共类表 { 公共字符串标题; 公共字符串[]
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,是的,这最终解决了问题。我觉得有点傻,因为我实际上在数据类内部尝试了字典,而不是用一个替换另一个,但没有做到这一点。谢谢所以我不得不用一本字典来代替整个班级。。。这真的很有用,我不知道它会自动填充。非常感谢,它完美地解决了我的问题,并教会了我一些新的东西,感谢实践演示。所以我不得不用一本字典来代替整个课堂。。。这真的很有用,我不知道它会自动填充。非常感谢,它完美地解决了我的问题,并教会了我一些新的东西,感谢实践演示。