【问题标题】:Organizing an XML result list with C#使用 C# 组织 XML 结果列表
【发布时间】:2020-12-06 15:35:55
【问题描述】:

我在如何组织我的食物列表时遇到问题,这是我创建的端点的结果。 问题来了:

这是我的课程Food...你可以看到它有一个Nutrients 的列表,我稍后会用到。

public class Food
{
    public int ID { get; set; }
    public string FoodID { get; set; }
    public string FoodName { get; set; }
    public List <Nutrient> Nutrients { get; set; }
}

public class Nutrient
{
    public string NutrientName { get; set; }
    public decimal NutrientValue { get; set; }
}

这是我当前返回的 XML:

<Food>
<FoodID>9003</FoodID>
<FoodName>Apples, raw, with skin</FoodName>
<ID>0</ID>
<Nutrient>Protein</Nutrient>
<NutrientValue>0.260</NutrientValue>
</Food>

<Food>
<FoodID>9003</FoodID>
<FoodName>Apples, raw, with skin</FoodName>
<ID>0</ID>
<Nutrient>Total lipid (fat)</Nutrient>
<NutrientValue>0.170</NutrientValue>
</Food>

<Food>
<FoodID>9003</FoodID>
<FoodName>Apples, raw, with skin</FoodName>
<ID>0</ID>
<Nutrient>Carbohydrate</Nutrient>
<NutrientValue>13.810</NutrientValue>
</Food>

我想做的是这样的:

<Food>
<FoodID>9003</FoodID>
<FoodName>Apples, raw, with skin</FoodName>
<ID>0</ID>
<Nutrient>
<NutrientName>Protein</Nutrient>
<NutrientValue>0.260</NutrientValue>
<NutrientName>Total lipid (fat)</Nutrient>
<NutrientValue>0.170</NutrientValue>
<NutrientName>Carbohydrate</Nutrient>
<NutrientValue>13.810</NutrientValue>
</Nutrient>
</Food>

基本上,我想按 ID 订购一个列表,因此属于同一 FoodID 的营养素会一起出现在一个列表中。

知道如何实现这个结果吗?

【问题讨论】:

  • 您是否控制返回 json 的 API?
  • @Jason 是的,我愿意!
  • 您可以创建一个名为 Nutrient 的元素并为其添加名称和值属性,如下所示:。然后元素 Food 将包含一组 Nutrients。
  • 你能分享那个端点的代码吗?我还建议使用营养 ID 或创建一个包含所有营养的枚举。

标签: c# .net xml api xamarin.forms


【解决方案1】:

当您必须依赖 DataContract 序列化 (WCF) 时,您可以这样做:

[DataContract]
public class Food
{
    [DataMember(Name = "Id")]
    public int ID { get; set; }

    [DataMember(Name = "Name")]
    public string Name { get; set; }

    [DataMember(Name ="Nutrients")]
    public List<Nutrient> Nutrients { get; set; }
}

[DataContract(Name = "Nutrient")]
public class Nutrient
{
    [DataMember(Name = "Name")]
    public string Name { get; set; }

    [DataMember(Name = "Value")]
    public decimal Value { get; set; }
}

这应该给你一个像这样的 XML:

<Food>
  <Id>9003</Id>
  <Name>Apples, raw with skin</Name>
  <Nutrients>
    <Nutrient>
      <Name>Protein</Name>
      <Value>0.260</Value>
    </Nutrient>
    <Nutrient>
      <Name>Total lipid (fat)</Name>
      <Value>0.170</Value>
    </Nutrient>
    <Nutrient>
      <Name>Carbohydrate</Name>
      <Value>13.810</Value>
    </Nutrient>
  </Nutrients>
</Food>

注意:通过数据协定序列化,您不能使用 XML 属性。基本上它应该是非常简单的 XML,所有元素都按固定顺序放置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2014-03-06
    • 1970-01-01
    • 2016-07-31
    • 2010-09-17
    相关资源
    最近更新 更多