【问题标题】:Trying to create a new item in list in c#试图在 C# 的列表中创建一个新项目
【发布时间】:2020-10-21 12:28:53
【问题描述】:

我很难在列表中绑定一个名为 url 的特定字段。

这是我的 json 格式:

{
     id: 'someID',
     name: 'someName.pdf',
     url: { 
         download: 'https://mydomain/api_binary/v1/document/mcipv7sgq11c9e6e42upqapc7k '
         }
}

这是我的模特

public class CantoItem
{
    
    public string id { get; set; }

    public string name { get; set; }

    [JsonProperty("default")]
    public DefaultNest Default { get; set; }

    [JsonProperty("url")]
    public ResultUrl Url { get; set; }
    
    [JsonProperty("tag")]
    public object Tag { get; set; }
    

}
public partial class ResultUrl
{
    [JsonProperty("preview")]
    public Uri Preview { get; set; }

    [JsonProperty("download")]
    public Uri Download { get; set; }
   }

    [JsonProperty("tag")]
    public List<string> Tag { get; set; }

}

然后添加我拥有的值:

    var cantoAssetMetadata = new List<CantoItem>();

                
foreach (JValue item in collection)
{
    try
    {
        var collectionjObj = JObject.Parse(item.ToString());            
        cantoAssetMetadata.Add(new CantoItem()
        {
            id = collectionjObj["id"].ToString(),
            name = collectionjObj["name"].ToString(),
            Url = collectionjObj["url"].ToString(),
            Tag = collectionjObj["tag"].ToString(),
        });
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Exeption: {ex}, {item}");
    }
}

其他字段设置正确,只是 URL 不正确,我不知道如何正确设置值。任何帮助将不胜感激

【问题讨论】:

  • 你在一个类对象上调用.ToString() - Url = collectionjObj["url"].ToString(), Url 是一个partial class 称为ResultUrl

标签: c# json list


【解决方案1】:

以下方法不起作用:

Url = collectionjObj["url"].ToString()

您需要初始化Url 并设置相关属性:

name = collectionjObj["name"].ToString(),
Url = new ResultUrl()
          {
              Download = new System.Uri(collectionjObj["url"].ToString())
          },
Tag = collectionjObj["tag"].ToString(),

【讨论】:

  • 这是完全错误的,这是如何被标记为接受的答案的,我永远不会知道。您正在使用class object .ToString() 并将其设置为新ResultUrl 的下载属性。这不会给你你想要的。
  • @RyanWilson 你是对的,我也错过了它是一个嵌套属性的事实,将删除我的帖子
  • 修复它,我很乐意删除我之前的评论。 :)
【解决方案2】:

为什么不试试

var cantoAssetMetadata = new List<CantoItem>();

                
foreach (JValue item in collection)
{
    try
    {
        cantoAssetMetadata.Add(item.ToObject<CantoItem>());
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Exeption: {ex}, {item}");
    }
}

【讨论】:

    【解决方案3】:

    您正在对类对象调用 .ToString() - Url = collectionjObj["url"].ToString(), Url 是一个名为 ResultUrlpartial class。将JToken 转换为适当的class,将deserializes 转换为

    //Convert to the proper class object type
    Url = collectionjObj["url"].ToObject<ResultUrl>;
    

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2013-01-26
      • 2020-01-15
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 2011-11-17
      相关资源
      最近更新 更多