如何命名c#类字段,以便能够使用无效字符反序列化json字段名称

时间:2013-10-29 21:56:21

标签: c# json.net json-deserialization

我正在使用JSON.NET反序列化我拥有的一些JSON响应。 到目前为止我一直很成功。 为了使JSON.NET正确反序列化对象,需要完全按照JSON中的方式调用类中的字段名称。问题是我有一些字段在其名称中有一些时髦的字符,我不能在C#中使用像{“(。

有谁知道如何重命名字段以便正确映射?

这是一个有效的简短例子。

JSON输入:

{
    "contact_id": "",
    "status": "Partial",
    "is_test_data": "1",
    "datesubmitted": "2013-10-25 05:17:06"
}

反序列化的类:

class DeserializedObject
{
    public string contact_id;
    public string status;
    public int is_test_data;
    public DateTime datesubmitted;
}

反序列化:

var deserialized = JsonConvert.DeserializeObject<DeserializedObject>(jsonInput);

这会正确映射。当我尝试处理以下字段时,问题就出现了:

{
    "contact_id": "",
    "status": "Partial",
    "is_test_data": "1",
    "datesubmitted": "2013-10-25 05:17:06",
    "[variable("STANDARD_GEOCOUNTRY")]": "Germany"
}

反序列化的类:

class Output
{
    public string contact_id;
    public string status;
    public int is_test_data;
    public DateTime datesubmitted;
    public string variable_standard_geocountry; // <--- what should be this name for it to work?
}

我将不胜感激。

2 个答案:

答案 0 :(得分:5)

使用JSON.NET,您只需要在属性上添加JsonProperty属性,例如:

class Output
{
    public string contact_id;
    public string status;
    public int is_test_data;
    public DateTime datesubmitted;

    [JsonProperty("[variable(\"STANDARD_GEOCOUNTRY\")]")]
    public string variable_standard_geocountry; // <--- what should be this name for it to work?
}

现在将反序列化。这假定您的JSON使用这些引号正确格式化,例如:

{
    "contact_id": "",
    "status": "Partial",
    "is_test_data": "1",
    "datesubmitted": "2013-10-25 05:17:06",
    "[variable(\"STANDARD_GEOCOUNTRY\")]": "Germany"
}

答案 1 :(得分:1)

您可以使用JsonProperty属性并将名称设置为此...

`

class Output
{
    public string contact_id;
    public string status;
    public int is_test_data;
    public DateTime datesubmitted;
    [JsonProperty("geocountry")]
    public string variable_standard_geocountry; // <--- what should be this name for it to work?
}

` 这里是文档的链接,可能还有其他可能对您有帮助的信息。 http://james.newtonking.com/json/help/?topic=html/JsonPropertyName.htm