gpt4 book ai didi

.net - JSON 对象数组到 .NET 对象

转载 作者:行者123 更新时间:2023-12-01 12:00:36 24 4
gpt4 key购买 nike

我有一个大对象返回,我只需要一小部分数据。我在看这个例子 here .我基本上想做同样的事情,除了问题是我会有一个“错误”对象数组。

所以,它看起来像这样

{
"short": {
"original": "http://www.foo.com/",
"short": "krehqk",
"error": [
{
"code": 0,
"msg": "No action taken"
},
{
"code": 0,
"msg": "No action taken"
}
]
}
}

是否有使用 JObject.Parse 或什至 Linq to 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; }
}

这是错误:无法将类型“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);
}

最佳答案

一位同事刚刚路过,向我展示了我想使用 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);
}

没什么。 :-)

关于.net - JSON 对象数组到 .NET 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com