C# json映射的类属性声明无效

C# json映射的类属性声明无效,c#,json,asp.net-mvc,mailgun,C#,Json,Asp.net Mvc,Mailgun,我从mailgunapi收到了以下json { "items": [{ "delivery-status": { "message": null, "code": 605, "description": "Not delivering to previously bounced address", "session-seconds": 0 }, "event": "failed", "log-level": "e

我从
mailgunapi
收到了以下
json

{
  "items": [{
    "delivery-status": {
      "message": null,
      "code": 605,
      "description": "Not delivering to previously bounced address",
      "session-seconds": 0
    },
    "event": "failed",
    "log-level": "error",
    "recipient": "test@test.com"
  },
  {
      //some other properties of above types
  }]
}
现在我正试图为上面的
json
创建一个类结构,以便在
反序列化后自动映射属性

public class test
{
    public List<Item> items { get; set; }
}
public class Item
{
    public string recipient { get; set; }
    public string @event { get; set; }
    public DeliveryStatus delivery_status { get; set; }
}

public class DeliveryStatus
{
    public string description { get; set; }
}
现在,在上面的类
项中,
收件人
@事件
得到了正确的映射,因为它是
关键字
,所以我假设使用前面的
@
字符,并且效果很好。但是
json
中的
delivery status
属性未与
class DeliveryStatus
中的
delevery\u status
属性映射。我已尝试将其创建为
deliveryStatus
@deliveryStatus
。前一个不会再次映射,后一个抛出编译时异常。这些事情是否可以处理,比如声明一个属性,中间有
-
?我无法更改
响应json
,因为它不是从我的终端生成的。希望得到一些帮助

更新

更改了类,如下所示,引用,但没有帮助。它的
null
再次出现

public class Item
{
    public string @event { get; set; }

    [JsonProperty(PropertyName = "delivery-status")]
    public DeliveryStatus deliveryStatus { get; set; }
}

我不确定你这方面的问题是什么,但如果你使用这段代码,至少它是有效的。确保在您的项目中包含最新版本的Newtonsoft.Json,这样您就没事了

public class DeliveryStatus
{
    public object message { get; set; }
    public int code { get; set; }
    public string description { get; set; }
    [JsonProperty("session-seconds")]
    public int session_seconds { get; set; }
}

public class Item
{
    [JsonProperty("delivery-status")]
    public DeliveryStatus delivery_status { get; set; }
    public string @event { get; set; }
    [JsonProperty("log-level")]
    public string log_level { get; set; }
    public string recipient { get; set; }
}

public class RootObject
{
    public List<Item> items { get; set; }
}

public static void Main(string[] args)
{
        string json = @"{
  ""items"": [{
    ""delivery-status"": {
                ""message"": null,
      ""code"": 605,
      ""description"": ""Not delivering to previously bounced address"",
      ""session-seconds"": 0
    },
    ""event"": ""failed"",
    ""log-level"": ""error"",
    ""recipient"": ""test@test.com""
  }]
}";

    RootObject r = JsonConvert.DeserializeObject<RootObject>(json);
}
公共类交付状态
{
公共对象消息{get;set;}
公共整数代码{get;set;}
公共字符串说明{get;set;}
[JsonProperty(“会话秒”)]
公共int会话_秒{get;set;}
}
公共类项目
{
[JsonProperty(“交付状态”)]
public DeliveryStatus delivery_status{get;set;}
公共字符串@event{get;set;}
[JsonProperty(“日志级别”)]
公共字符串日志_级别{get;set;}
公共字符串收件人{get;set;}
}
公共类根对象
{
公共列表项{get;set;}
}
公共静态void Main(字符串[]args)
{
字符串json=@”{
“项目”:[{
“交付状态”:{
“”消息“”:空,
“代码”:605,
“”说明“”:“”未传递到以前跳转的地址“”,
“会话秒数”:0
},
“”事件“”:“”失败“”,
“日志级别”“:”“错误”“,
“收件人”:test@test.com""
}]
}";
rootobjectr=JsonConvert.DeserializeObject(json);
}

使用的是
Json.NET
(可以处理此问题),而不是默认的
JavaScriptSerializer
选项?
DeliveryStatus
类只有很少的属性,而不是一个。有:message、code、description、session-seconds。对于
Json.NET
,如果您将属性名称更改为(比如)
DeliveryStatus
,那么这应该可以工作。我假设您已将序列化程序设置为使用Json.NET。看不出它不起作用的任何原因,但我目前无法测试它(如果您没有解决它,将在周末检查)。我不知道出了什么问题,但我更改了此行
(test)json。反序列化(resp.Content,typeof(test))
测试r=JsonConvert.DeserializeObject(分别为内容)是的,现在它可以工作了。。因此,基本上,
反序列化
json.Deserialize
?我猜您是在尝试将Microsoft的
JavaScriptSerializer
与json.NET的
JsonProperty
属性混合使用。那不行,是的。。这就是问题所在。。无论如何。。很高兴知道解决办法。。非常感谢,谢谢@StephenMuecke。。终于解决了……)
public class DeliveryStatus
{
    public object message { get; set; }
    public int code { get; set; }
    public string description { get; set; }
    [JsonProperty("session-seconds")]
    public int session_seconds { get; set; }
}

public class Item
{
    [JsonProperty("delivery-status")]
    public DeliveryStatus delivery_status { get; set; }
    public string @event { get; set; }
    [JsonProperty("log-level")]
    public string log_level { get; set; }
    public string recipient { get; set; }
}

public class RootObject
{
    public List<Item> items { get; set; }
}

public static void Main(string[] args)
{
        string json = @"{
  ""items"": [{
    ""delivery-status"": {
                ""message"": null,
      ""code"": 605,
      ""description"": ""Not delivering to previously bounced address"",
      ""session-seconds"": 0
    },
    ""event"": ""failed"",
    ""log-level"": ""error"",
    ""recipient"": ""test@test.com""
  }]
}";

    RootObject r = JsonConvert.DeserializeObject<RootObject>(json);
}