繁体   English   中英

JSON映射的无效类属性声明

[英]Invalid class property declaration for json mapping

我下面是从mailgun API接收的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创建一个类结构,以在deserializing后自动映射属性。

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; }
}

这就是我deserialize并尝试映射属性的方式。

var resp = client.Execute(request);
var json = new JavaScriptSerializer();
var content = json.Deserialize<Dictionary<string, object>>(resp.Content);
test testContent = (test)json.Deserialize(resp.Content, typeof(test));
var eventType = testContent.items[0].@event;
var desc = testContent.items[0].delivery_status.description; //stays null

现在在上面的类Itemrecipient@event得到了正确的映射,由于这是一个keyword我想使用前面的@字符,并且效果很好。 但是jsondelivery-status属性未与delevery_status class DeliveryStatus delevery_status属性映射。 我尝试将其创建为deliveryStatus@deliver-status 较早的版本不会再次映射,而较晚的版本会抛出编译时异常。 无论如何,这些事情是否可以处理,例如在-之间声明属性? 我无法更改response json因为它不是从末端生成的。 希望能有所帮助。

更新

参照this answer将类更改为以下内容,但没有帮助。 它再次为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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM