在 C# 中创建一个每次都可以具有不同属性的类或对象
Posted
技术标签:
【中文标题】在 C# 中创建一个每次都可以具有不同属性的类或对象【英文标题】:Create an class or an object that can have different properties everytime in C# 【发布时间】:2021-12-13 18:21:52 【问题描述】:我有一个类,它有一个名为 properties 的属性,但该属性可以有不同的值。这些是来自某个地方的动态值,我需要创建一个结构为 具有 Customer 和属性的 Json 可以具有不同的值。我尝试了以下方法:
客户类别
public class Customer
public string name get;set;
public dynamic properties get;set;
这些属性可以是动态的。例如 - 这可以是我得到的 json
第一个例子:
"properties":
"name": "Mark",
"address":
"city":"paris"
第二个例子:
"properties":
"name": "Chris",
"description":"human",
"birth":"1990",
"address":
"name":"paris"
每当我执行 properties.address.name 时,它都会说它可以引用 null 引用。我不确定动态类型是否正确。这应该如何在 C# 中完成。如果属性可以有不同的值,你采取什么方法?
【问题讨论】:
您不是第一个在 C# 中处理 JSON 的人。您认为需要自己构建它有什么特别的原因吗? 这能回答你的问题吗? Dynamic Object Serialization @Damien_The_Unbeliever 你自己是什么意思?我们需要将其发送到特定产品,因此我们需要自己构建它 受@Harish 想法启发,您可以在运行时使用反射创建具有自定义属性的自定义类型:***.com/questions/3862226/… 这能回答你的问题吗? Deserialize JSON into C# dynamic object? 【参考方案1】:动态类型很复杂,但简而言之,它们是在运行时而不是编译时评估的(请参阅:https://www.geeksforgeeks.org/dynamic-type-in-c-sharp/)。看起来这不是您正在处理的问题,您可以简化解决方案。
您的问题似乎有很多答案(简短的谷歌提出:Add properties dynamically at run time in existing class c# 等等),您可以尝试并实施。
但是 - 使用像 newtonsoft.json
这样的 json 支持包并有一个 json 对象作为 Properties
可能会更容易。
然后您将能够添加和使用 json 元素(属性):
using Newtonsoft.Json;
public class Customer
public string Name get;set;
public JObject Properties get;set; = new JObject();
添加:
customer.Properties["evilProp"] = 666;
然后得到它:
var numberFromHell = customer.Properties["evilProp"];
【讨论】:
这是一个好的开始,但没有按预期工作。我正在尝试以下 customer.Properties["evilProp"] = new name = "Test", address= new name = "what", last = new name = "test5" ;它说无法转换为 Jtoken 我可以将它更改为 ToString() 但我需要它是 JSON 格式。你能帮忙吗?customer.Properties["evilProp"]
与您的示例不匹配。 customer.Properties = new name = "Test", address= new name = "what" ;
确实如此。而且您不能对动态对象使用索引。以上是关于在 C# 中创建一个每次都可以具有不同属性的类或对象的主要内容,如果未能解决你的问题,请参考以下文章