【问题标题】:Deserialize to a dynamically loaded class反序列化为动态加载的类
【发布时间】:2012-12-31 06:17:52
【问题描述】:

我必须在 XML 下反序列化。但我必须将传感器数据存储到动态加载的类中。 我该怎么做?

XML 格式

   <Root>
        <Sensor id="0" Channel="1000">
            <SensorName>RM-T</SensorName>
            <SensorValue>148.00</SensorValue>
        </Sensor>
        <Sensor id="1" Channel="1001">
            <SensorName>SAT1</SensorName>
            <SensorValue>148.00</SensorValue>
        </Sensor>
    </Root>

存储反序列化数据的主类

[Serializable]
[XmlRoot(ElementName = "Root")]
public class Controller
{        
    public List<Sensor> SensorList
    {
        get;
        set;
    }       
}

传感器类

   public abstract class Sensor
    {
        String SensorName { get; set; }
        String SensorValue { get; set; }   
        public abstract override String ToString();     
    }

RegularSensor 类

    public class RegularSensor : Sensor
    {

        public override string ToString()
        {
           //Implementation goes here
        }
    }

在反序列化期间,我需要将传感器数据加载到 RegularSensor 类 我该怎么做?

【问题讨论】:

  • 为什么需要动态的?对我来说看起来很静态..
  • XML 来自硬件控制器,具体取决于控制器,数据处理会发生变化。因此 Sensorvalue 会有不同的实现。未来抽象类中会有不同的功能,不同的实现
  • ...但 SensorValue 在您的示例中是一个属性.. 不是根对象。你是说根对象(xml的结构布局)会改变吗?还是只是价值观?
  • XMl 的结构不会改变。但节点的别名可能会改变。例如,在某些 XML 中,“SensorValue”将是“Value”
  • 在java中我使用这个代码做了同样的事情 - XStream xStreamXmlSerializer = new XStream(new DomDriver()); xStreamXmlSerializer.alias("Sensor", RegularSensor.class);

标签: c# xml-serialization


【解决方案1】:

你可以这样吗:

 public class RegularSensor : Sensor
    {
        Sensor mySensor = new Sernsor();
        public override string ToString()
        {
           //Implementation goes here
        }
    }

然后在函数中反序列化这个对象'mySensor',就可以得到所有的数据了。

【讨论】:

  • 所以..继承AND组合? ...为什么?
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多