Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任务和从api逻辑反序列化对象以及反序列化json_C#_Json_Xamarin_Xamarin.ios - Fatal编程技术网

C# 任务和从api逻辑反序列化对象以及反序列化json

C# 任务和从api逻辑反序列化对象以及反序列化json,c#,json,xamarin,xamarin.ios,C#,Json,Xamarin,Xamarin.ios,我希望有人能帮我解释一下这些逻辑。我希望这不是太具体,这样可能会帮助其他人。我敢肯定,这看起来肯定是这样的,但我不知道这在行业中是否普遍(我应该是一名经济学家,但我正在帮助编程,直到我们找到一位更精通这一行业的人) 背景:我被要求对api返回的json对象进行反序列化,但我不确定我是否正确理解了代码,因此在此之前我无法对其进行反序列化。我的两个希望是,如果我的逻辑不正确,有人可以纠正我,并帮助我找出如何反序列化它 目标非常简单:使用从api返回的项的UITableView显示列表。我已经设置好了

我希望有人能帮我解释一下这些逻辑。我希望这不是太具体,这样可能会帮助其他人。我敢肯定,这看起来肯定是这样的,但我不知道这在行业中是否普遍(我应该是一名经济学家,但我正在帮助编程,直到我们找到一位更精通这一行业的人)

背景:我被要求对api返回的json对象进行反序列化,但我不确定我是否正确理解了代码,因此在此之前我无法对其进行反序列化。我的两个希望是,如果我的逻辑不正确,有人可以纠正我,并帮助我找出如何反序列化它

目标非常简单:使用从api返回的项的UITableView显示列表。我已经设置好了UITableView。我现在只需要把数据填进去。这是我之前写的。这是任务/api:

  public async Task<Food> FoodCatalog(int category)
    {
        string url = Service.baseURL + Service.FoodCatalog + "?category=" + category.ToString();

        dynamic results = await Service.getDataFromService(url).ConfigureAwait(false);
        string json = results as string;     // Otherwise error next line ???

        Food items = JsonConvert.DeserializeObject<Food>(json);

        return items;
    }
public异步任务FoodCatalog(int类别)
{
字符串url=Service.baseURL+Service.FoodCatalog+“?category=“+category.ToString();
动态结果=等待服务.getDataFromService(url).配置等待(false);
string json=结果为字符串;//否则下一行出错???
Food items=JsonConvert.DeserializeObject(json);
退货项目;
}
这是食物课:

public struct FoodStruct
{
    [JsonProperty(PropertyName = "FoodGroupTypeId")] public short? FoodGroupTypeId;
    [JsonProperty(PropertyName = "FoodGroupDescription")] public string FoodGroupDescription;
    [JsonProperty(PropertyName = "FoodId")] public int? FoodId;
    [JsonProperty(PropertyName = "FoodDescription")] public string FoodDescription;
}

public class Food
{
    [JsonProperty(PropertyName = "Table Selection")] public static List<FoodStruct> FoodList = new List<FoodStruct>();

    public FoodStruct this[int key] { get { return FoodList[key]; } }

    public static string[] ToStringArray()
    {
        string[] list = new string[FoodList.Count];
        int i = 0;

        foreach (FoodStruct fs in FoodList)
        {
            list[i++] = fs.FoodDescription;
        }

        return list;
    }

    public static implicit operator string(Food v)
    {
        throw new NotImplementedException();
    }
}
public struct FoodStruct
{
[JsonProperty(PropertyName=“FoodGroupTypeId”)]公共缩写?FoodGroupTypeId;
[JsonProperty(PropertyName=“FoodGroupDescription”)]公共字符串FoodGroupDescription;
[JsonProperty(PropertyName=“FoodId”)]public int?FoodId;
[JsonProperty(PropertyName=“FoodDescription”)]公共字符串FoodDescription;
}
公共食品
{
[JsonProperty(PropertyName=“Table Selection”)]公共静态列表FoodList=new List();
public FoodStruct this[int key]{get{return FoodList[key];}
公共静态字符串[]ToStringArray()
{
string[]list=新字符串[FoodList.Count];
int i=0;
foreach(FoodList中的FoodStruct fs)
{
list[i++]=fs.FoodDescription;
}
退货清单;
}
公共静态隐式运算符字符串(v)
{
抛出新的NotImplementedException();
}
}
api有一个任务连接到url,获取结果,并将反序列化对象作为类返回?这就是逻辑的运作方式吗

食物课看起来像是做了我想做的。它似乎创建了一个食物描述列表(食物组等还不是非常重要)。但我无法访问食物清单,我真的不能完全确定这是我想要的,但似乎是这样


有人能纠正我的逻辑并帮助我找出如何反序列化对象以将其放入UITableView中吗?

您可以使用Newtonsoft.Json:

string foodJson = "[{\"FoodGroupTypeId\":\"apple\", \"FoodGroupDescription\":\"apple fruit\",\"FoodId\": \"Fuji Apple\",\"FoodDescription\": \"Fuji Apple\"}]";

var obj = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(foodJson);

foreach (var ch in obj.Children())
{
    string id = ch["FoodGroupTypeId"].ToString();  
}

反序列化您的响应,如下所示

public async Task<Food> FoodCatalog(int category)
{
    string url = Service.baseURL + Service.FoodCatalog + "?category=" + category.ToString();
    dynamic results = await Service.getDataFromService(url).ConfigureAwait(false);
    string json = results as string;  // Otherwise error next line ???
    var items = JsonConvert.DeserializeObject<List<Food>>(json);        
    return items;
}

有关如何绑定TableView的更多信息,请访问

谢谢!你能告诉我这里的逻辑吗?我该把这个放在哪里?api是类中的一个方法,因此在其所在的方法之外无法获取json变量。添加了一个json示例。让我知道这是不是很棒。在我晚些时候回家之前我无法尝试,但这很容易理解,也不难。谢谢很高兴听到这对你有帮助。你介意我再得到一些帮助吗?我知道你给我发送了关于如何绑定它的链接,但我仍然有一个问题。我以前做过一个表视图,它本质上是一样的,但它确实给我带来了问题。事实上,我找到了它!不过,非常感谢您的指导。没有它是不可能做到的!
public async override void ViewDidLoad()
{       
    //Create your API class object & call foodCatalog method here
    var items=await FoodCatalog(params)
    //Bind your UITableView
    mainListview.Source = new TableViewSource(items); 
}