C# 如何在JSON中隐藏对象字段名?
我正在开发一个返回JSON文件的WEB API。我希望我的JSON像这样:C# 如何在JSON中隐藏对象字段名?,c#,C#,我正在开发一个返回JSON文件的WEB API。我希望我的JSON像这样: { "PensionDistribution": [{ "rows": [{ "uniqueName": "Age" }] }, { "columns": [{ "uniqueName": "Year" }, { "uniqueName": "Ty
{
"PensionDistribution": [{
"rows": [{
"uniqueName": "Age"
}]
},
{
"columns": [{
"uniqueName": "Year"
},
{
"uniqueName": "Type"
}]
},
{
"measures": [{
"uniqueName": "AgentID",
"aggregation": "count"
}]
},
{
"fields": {
"Age": {
"type": "number",
"caption": "Age"
},
"AgentComputedCompleteName": {
"type": "string",
"caption": "Nom complet encodé de l'agent"
},
"AgentID": {
"type": "number",
"caption": "ID Agent"
},
"MatriculeAgent": {
"type": "string",
"caption": "Matricule agent"
},
"Type": {
"type": "string",
"caption": "Type"
},
"TypeKey": {
"type": "string",
"caption": "Type clé"
},
"Year": {
"type": "string",
"caption": "Année"
}
}
}]
}
{
"Name": "PensionDistribution",
"Rows": [{
"UniqueName": "Age"
}],
"Columns": [{
"UniqueName": "Year"
},
{
"UniqueName": "Type"
}],
"Measures": [{
"UniqueName": "AgentID",
"Aggregation": "count"
}],
"Fields": [{
"Name": "Age",
"Attributes": {
"Type": "number",
"Caption": "Age"
}
},
{
"Name": "AgentComputedCompleteName",
"Attributes": {
"Type": "string",
"Caption": "Nom complet encodé de l'agent"
}
},
{
"Name": "AgentID",
"Attributes": {
"Type": "number",
"Caption": "ID Agent"
}
},
{
"Name": "MatriculeAgent",
"Attributes": {
"Type": "string",
"Caption": "Matricule agent"
}
},
{
"Name": "Type",
"Attributes": {
"Type": "string",
"Caption": "Type"
}
},
{
"Name": "TypeKey",
"Attributes": {
"Type": "string",
"Caption": "Type clé"
}
},
{
"Name": "Year",
"Attributes": {
"Type": "string",
"Caption": "Année"
}
}]
}
因此,我创建了将数据库数据转换为JSON的类:
public class PivotConfigData
{
public class Report
{
public string Name { get; set; }
public List<Row> Rows { get; set; }
public List<Column> Columns { get; set; }
public List<Measure> Measures { get; set; }
public List<Field> Fields { get; set; }
public Report()
{
Name = "";
Rows = new List<Row>();
Columns = new List<Column>();
Measures = new List<Measure>();
Fields = new List<Field>();
}
}
public class Row
{
public string UniqueName { get; set; }
}
public class Column
{
public string UniqueName { get; set; }
}
public class Measure
{
public string UniqueName { get; set; }
public string Aggregation { get; set; }
}
public class Field
{
public string Name { get; set; }
public FieldAttributes Attributes { get; set; }
}
public class FieldAttributes
{
public string Type { get; set; }
public string Caption { get; set; }
}
}
如你所见,它在“养老金分配”之前加上了“名称”:但这没什么大不了的。这是“字段”集合的问题,因为它添加了“名称”和“属性”,如何删除或隐藏这些属性名称?我试图在我的属性之前添加[JsonProperty(“”),但它将“Name”:替换为“”:这不是我想要的
有人能帮我吗 在不需要的属性上使用
要更改属性名,请使用
[JsonProperty(PropertyName=“NewName”)]
而不是使用JSON.NET中的属性(这使您的代码依赖于它),您可以使用.NET Framework的常规序列化属性(DataMemberAttribute
,DataContractAttribute
,等等)
要忽略/删除JSON中的属性,可以使用IgnoreDataMemberAttribute
来修饰它们
[DataContract]
public class Field
{
[IgnoreDataMember]
public string Name { get; set; }
[DataMember]
public FieldAttributes Attributes { get; set; }
}
谢谢,但是如何用我的field类的name属性替换名称“Attributes”?我尝试了[JsonProperty(Name)],但它不起作用。如果我不使用代码序列化,我的web api控制器会返回一个对象,该对象会自动序列化为JSON。然后使用[JsonProperty(PropertyName=“NewName”)]是否可以使用变量而不是常量值?我不知道。在我看来,变量是个坏主意。Json看起来应该总是一样的。如果我没有弄错的话,Json.NET会排除所有没有声明
[DataMember]
的值,如果在类中找到[DataContract]
。看看这个@Toxantron是的,也许它是这样工作的。但最好明确声明忽略该属性。可能是有些人忘记了用属性修饰属性,问题是字段是一个对象,其属性以“所需”JSON中的每个字段命名。因此,它不能从报表类(C#)指定的字段集合中转换。我认为,您所提供的理想JSON结构不够通用。我想知道这个用户如何能够轻松地使用它(例如,他们无法获得字段集合——相反,他们必须硬编码访问每个名为properties的“Fields”对象……如果有的话,第二个JSON(您从C#获得的但您不想要的JSON)似乎更容易使用(对于您和WebAPI的消费者来说都是如此)-JSON模式不应在报表之间更改。它应该有一个具有名称等的字段的通用集合,而不是对象上的命名属性。是的,我知道所需的JSON具有奇怪的结构中的字段,但这是我需要使用pivot控件的配置。最后,我找到了一个解决方案,并用字典替换了列表字段d得到了很好的格式。谢谢你的建议!你应该把你的解决方案作为答案(它可能对其他人有用-这确实是一个有趣的问题)。:)