c# - 如何获取具有列表的属性的值在 C# 中?
问题描述
我有以下课程
public class MyClass
{
public string Name {get; set;}
public List<string> Products {get; set;}
}
如果我使用下面的代码,我可以获得'''Name'''属性的值。但是无法获取产品列表的值。
怎么做?
Type type = user.GetType();
PropertyInfo[] props = type.GetProperties();
string str = "{";
foreach (var prop in props)
{
str+= (prop.Name+":"+ prop.GetValue(user))+",";
}
return str.Remove(str.Length-1)+"}";
解决方案
向类型添加ToJson()
方法:
public class MyClass
{
public string Name {get; set;}
public List<string> Products {get; set;}
public string ToJson()
{
var result = new StringBuilder("{");
result.Append("\"Name\":\"")
.Append(Name)
.Append("\",{\"Products\":[{\"Product\":\"");
var delimiter = "";
foreach(var product in Products)
{
result.Append(delimter).Append(product);
delimiter = "\"},{\"Product\":\"";
}
result.Append("\"}]}");
return result.ToString();
}
}
那么代码就变成了:
string str = user.ToJson();
如果您需要为许多不同的类型执行此操作,请创建一个它们可以实现的接口:
interface ICanHazJson
{
string ToJson();
}
然后让你关心的每个类型都实现接口:
public class MyClass : ICanHazJson
{
public string Name {get; set;}
public List<string> Products {get; set;}
public string ToJson()
{
var result = new StringBuilder("{");
result.Append("\"Name\":\"")
.Append(Name)
.Append("\",{\"Products\":[{\"Product\":\"");
var delimiter = "";
foreach(var product in Products)
{
result.Append(delimter).Append(product);
delimiter = "\"},{\"Product\":\"";
}
result.Append("\"}]}");
return result.ToString();
}
}
如果有很多类型很重要,那就更有理由在 NuGet 上找到一个经过实战考验的 json 序列化程序,它可以满足您的需要,并且不会在一些意外的边缘情况下崩溃。
推荐阅读
- c# - 用于 if 语句的 Visual Studio C# 延迟函数
- bash - 打印 IFS 字符
- redis - 谷歌云运行 redis 客户端失去与实例的连接
- vue.js - 切换语言时 Nuxt i18n 无法正确翻译
- angular - 在 Angular 编辑器中使用时,HTML 代码在 kolkov/angular-editor 中不起作用
- windows-10 - 无法安装作曲家。任何建议将不胜感激
- python - Unexpected line in the seaborn bar plot
- reactjs - React Jest TypeError:无法读取未定义的属性“baseUrl”
- angularjs - 如何测试用 mixin 重写的 FullCalendar 函数
- c# - 在 API 中加载 PDF 后释放内存