C# 如何在JSON中隐藏对象字段名?

C# 如何在JSON中隐藏对象字段名?,c#,C#,我正在开发一个返回JSON文件的WEB API。我希望我的JSON像这样: { "PensionDistribution": [{ "rows": [{ "uniqueName": "Age" }] }, { "columns": [{ "uniqueName": "Year" }, { "uniqueName": "Ty

我正在开发一个返回JSON文件的WEB API。我希望我的JSON像这样:

{
    "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得到了很好的格式。谢谢你的建议!你应该把你的解决方案作为答案(它可能对其他人有用-这确实是一个有趣的问题)。:)