C# 带特殊键的词典
有没有办法实现一个只能使用特定密钥的字典?下面是一个json:C# 带特殊键的词典,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,有没有办法实现一个只能使用特定密钥的字典?下面是一个json: { “数据”:[ {“用户名”:“某些值”}, {“家族”:“某些价值”} ] } 模型如下: 公共类请求{ 公共列表数据{get;set;} } 那么,有没有办法实现字典的键,它只能接受用户名和族?正如Ryan Wilson所说,您可以创建一个类(例如UserFamily),它有两个属性:用户名和族,然后使用列表来存储数据。然后,使用JsonConvert.SerializeObject()方法序列化对象并获取Json数据 要
{
“数据”:[
{“用户名”:“某些值”},
{“家族”:“某些价值”}
]
}
模型如下:
公共类请求{
公共列表数据{get;set;}
}
那么,有没有办法实现字典的键,它只能接受
用户名
和族
?正如Ryan Wilson所说,您可以创建一个类(例如UserFamily),它有两个属性:用户名和族,然后使用列表
来存储数据。然后,使用JsonConvert.SerializeObject()方法序列化对象并获取Json数据
要在asp.net core中使用Newtinsoft.json,可以参考以下步骤:
.AddNewtonsoftJson()
:
services.AddControllersWithViews().AddNewtonsoftJson();
代码>参考:
public class UserFamily
{
[JsonProperty("username")]
public string UserName { get; set; }
[JsonProperty("family")]
public string Family { get; set; }
}
public class Request
{
[JsonProperty("data")]
public List<UserFamily> Data { get; set; }
}
公共类UserFamily
{
[JsonProperty(“用户名”)]
公共字符串用户名{get;set;}
[JsonProperty(“家族”)]
公共字符串族{get;set;}
}
公共类请求
{
[JsonProperty(“数据”)]
公共列表数据{get;set;}
}
控制器中的代码:
List<UserFamily> data = new List<UserFamily>()
{
new UserFamily(){ UserName="John", Family="Smith"},
new UserFamily(){ UserName="Buchanan", Family="Steven"}
};
var request = new Request() { Data = data };
var result = JsonConvert.SerializeObject(request);
列表数据=新列表()
{
新UserFamily(){UserName=“John”,Family=“Smith”},
新UserFamily(){UserName=“Buchanan”,Family=“Steven”}
};
var request=new request(){Data=Data};
var result=JsonConvert.SerializeObject(请求);
结果如下:
那么,数据中是否只有名称为“username”和“family”的对象??为什么要使用
词典的列表
?看起来您将从json
中获得一个对象数组。你能提供更多的样本数据吗?不,它可以有多个对象,但它们是静态的,而不是动态的。这里有一个字典的平均值列表@Ryanwilson为什么不创建一个具有两个属性的类,UserName
和Family
,并对其使用Newtonsoft
JsonProperty
属性将其设置为小写,然后使用自定义类的列表进行反序列化?我认为没有必要使用字典
,但是如果您坚持使用字典
的列表
,并且希望阻止它使用除这两个键之外的任何其他键,那么您需要创建一个自定义
字典
,实现接口
,并实现您自己的。添加-()您能帮助我如何使用Newtonsoft吗@RyanWilsonNewtonsoft
只是一个可以安装在项目中的nuget
软件包,它广泛用于安装后的序列化
和反序列化
。您可以使用Newtonsoft.Json通过将其导入自定义类
然后在自定义类中,在属性上方执行[JsonProperty(“用户名”)]
,即[JsonProperty(“用户名”)]公共字符串用户名{get;set;}