C#_List of objects 中通过 XElement 的属性

Posted

技术标签:

【中文标题】C#_List of objects 中通过 XElement 的属性【英文标题】:Attributes via XElement in C#_List of objects 【发布时间】:2020-03-09 08:06:16 【问题描述】:

我有一个类“WsReferenceValue”,其中包含其他类“Characteristic”的列表,并且该类 Characteristic 具有另一个类“Definition”的属性,这是我的代码:

  public class WsReferenceValue
  
     [DataContract]
     public class WsReferenceValue : WsEntitiesDimension
     
        public List<Characteristic> listCharacteristic  get; set;        
     
     [DataContract]
     public class Characteristic
           
          [DataMember]      
           public Definition definition  get; set;  
     
     [Serializable]   
     public class Definition
     
          [XmlAttribute]
           public int id;
           [XmlAttribute]
           public string name;
      
 

我的代码:

 WsReferenceValue referenceV = new WsReferenceValue();
 List<Characteristic> ListFinalDynamic = new List<Characteristic>();
 foreach (var finalCharac in listeCharactresticFinal)
 
                var lstChars = new Characteristic()
                        
                            Definition = new Definition()
                            
                                id = Dimension.ID,
                                name = Dimension.Name
                            
                        ;                          
             ListFinalDynamic.Add(lstChars);                    
            referenceV.listCharacteristic = ListFinalDynamic;    
   

我得到了这个结果:

 <WsReferenceValue>                     
    <listCharacteristic>
                <Characteristic>
                    <Definition>
                        <id>1</id>
                        <name>COMPANY</name>
                    </Definition>
                </Characteristic>

                <Characteristic>
                    <Definition>
                        <id>71</id>
                        <name>COUNTRY</name>
                    </Definition>
                </Characteristic>

                <Characteristic>
                    <Definition>
                        <id>45</id>
                        <name>CURRENCY</name>
                    </Definition>
                </Characteristic>
  </listCharacteristic>

我的目标是使用这种格式获取一个参考的所有特征列表:(每个具有属性的特征)

 <WsReferenceValue>                     
    <listCharacteristic>
                <Characteristic>
                    <Definition id=1 name="COMPANY" />                        
                </Characteristic>

                <Characteristic>
                    <Definition id=71 name="COUNTRY" />
                </Characteristic>

                <Characteristic>
                    <Definition id=45 name="CURRENCY" />                      
                </Characteristic>
  </listCharacteristic>

我该如何解决?谢谢

【问题讨论】:

参考这个***.com/questions/45270479/… 感谢@JayakumarThangavel 的回复,但还是不太清楚,因为和我的objectif不同 如何序列化为 XML?您的 c# 数据模型混合了 XmlSerializer 属性和数据协定属性,因此不清楚 @dbc 我没有序列化,我没有为序列化做任何事情。 WCF 运行时正在为我序列化结果 那么你可能想要DataContract XML serialization and XML attributes。 WCF 默认使用不支持 XML 属性的数据契约序列化程序,因此您需要通过将 [XmlSerializerFormat] 应用于您的服务或操作契约来切换到 XmlSerializer。如果您要分享minimal reproducible example,显示我们可以肯定地说的服务和运营合同。 【参考方案1】:

实际上是为了解决我的问题:我修改了概念:首先我不使用 XMLSerializer,我只使用 DataContractSerializer,所以我删除了定义类,然后我将列表 xelement 添加到一个 xelement 中,我得到了我的结果,

我的 WsReferenceValue 类:

  [DataContract]
 public class WsReferenceValue : WsEntitiesDimension
  
    [DataMember]
    public XElement listCharacteristic get ; set;

实现:

WsReferenceValue referenceV = new WsReferenceValue();
foreach (var finalCharac in listeCharactresticFinal)
    
  var XelementTemp = new XElement("ReferenceValue",
      new XAttribute("Name", refVal.Name),
      new XAttribute("Id", refVal.ID)); 

      referenceV.listCharacteristic.Add(XelementTemp);                  
    

我得到了我想要的结果:

<listCharacteristic>
        <ReferenceValues xmlns="">
            <ReferenceValue Name="CC" Id="1"  />
            <ReferenceValue Name="S9999" Id="4" "0"/>
            <ReferenceValue Name="EE45" Id="5" />  
        </ReferenceValues>
</listCharacteristic>   

【讨论】:

以上是关于C#_List of objects 中通过 XElement 的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在Objective C中通过UIView获取UIAlertController?

在python的List中通过其成员查找对象

Python(3.8):map(lambda x:x.method(),list_of_objects)不起作用[重复]

不确定将代码放在程序中的啥位置。如何在 XCode 中通过触摸生成圆圈。 (目标-C)

在jQuery中通过部分ID查找元素? [复制]

salesforce 零基础学习(六十三)Comparable实现Object列表数据的自定义排序