.NET对象的JSON对象数组

Jee*_*rus 3 .net json

我有一个大的物体回来,我只需要一小部分数据.我一直在寻找的例子在这里.我本质上想要做同样的事情,除了问题是我会有一个"错误"对象数组.

所以,它看起来像这样

{
    "short": {
        "original": "http://www.foo.com/",
        "short": "krehqk",
        "error": [
            {
                "code": 0,
                "msg": "No action taken" 
            },
            {
                "code": 0,
                "msg": "No action taken" 
            }
        ] 
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以使用JObject.Parse甚至Linq到JSON来实现这一点?我最好只使用JsonConvert.DeserializeObject,而不是在我创建的.NET对象中不包含我不需要的属性/对象?

更新 使用上面的JSON是我的测试......

[TestMethod]
public void ParseStuffTest()
{
    JObject json = JObject.Parse(shortJson);

    Shortie shortie = new Shortie
    {
        Original = (string)json["short"]["original"],
        Short = (string)json["short"]["short"],
        Error = new ShortError
        {
            Code = (int)json["short"]["error"]["code"],
            ErrorMessage = (string)json["short"]["error"]["msg"]
        }
    };
    Assert.IsNotNull(shortie);
}

public class Shortie
{
    [JsonProperty]
    public string Original { get; set; }

    [JsonProperty]
    public string Short { get; set; }

    [JsonProperty]
    public List<ShortError> Error{ get; set; }
}

public class ShortError
{
    [JsonProperty]
    public int Code { get; set; }
    [JsonProperty]
    public string ErrorMessage { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是错误:无法将类型'Unit_Tests.Test.ShortError'隐式转换为'System.Collections.Generic.List'

我错过了什么?


这就是我想出来的......我只是不喜欢它,因为我正在使用的真实对象要大得多,并且有多个属性与数组对象.这是我唯一的选择吗??? (除了显而易见的JsonConvert.Deserialize)

[TestMethod]
public void ParseStuffTest()
{
    JObject json = JObject.Parse(shortJson);
    var errors = json["short"]["error"].Children().ToList();
    var shortErrors = new List<ShortError>();
    foreach (var error in errors)
    {
        var shortError = new ShortError
                             {
                                 Code = (int)error["code"],
                                 ErrorMessage = (string)error["msg"]
                             };
        shortErrors.Add(shortError);
    }
    var shortie = new Shortie
    {
        Original = (string)json["short"]["original"],
        Short = (string)json["short"]["short"],
        Error = shortErrors
    };
    Assert.IsNotNull(shortie);
    Assert.AreEqual(2, shortie.Error.Count);
}
Run Code Online (Sandbox Code Playgroud)

Jee*_*rus 5

一位同事刚刚停下来,向我展示了我想用Linq to JSON做什么......

[TestMethod]
public void ParseStuffTest()
{
    JObject json = JObject.Parse(shortJson);
    var shortie = new Shortie
    {
        Original = (string)json["short"]["original"],
        Short = (string)json["short"]["short"],
        Error = json["short"]["error"].ToList().Select(
            c => new ShortError { Code = (int)c["code"], ErrorMessage = (string)c["msg"] }).ToList()
    };
    Assert.IsNotNull(shortie);
    Assert.AreEqual(2, shortie.Error.Count);
}
Run Code Online (Sandbox Code Playgroud)

什么都没有.:-)