C# 对于具有非.Net数据类型的其他系统中的字段,建议实施

C# 对于具有非.Net数据类型的其他系统中的字段,建议实施,c#,.net,C#,.net,我正在从另一个系统读取数据,该系统返回XML,为每个字段提供以下信息: “字段名”、“数据类型”和“大小”。返回的“数据类型”可以是:Alpha、LAlpha、RAlpha、CAlpha或Numeric。有时还会返回其他属性,例如套管。我想创建对象来对返回的数据进行建模,并且还必须生成xml,其中包含根据给定数据类型格式化的元素值,以便发送回其他系统以执行事务。我开始创建一个表示对象上每个属性的对象,如: //Type T represents the data type of the Valu

我正在从另一个系统读取数据,该系统返回XML,为每个字段提供以下信息: “字段名”、“数据类型”和“大小”。返回的“数据类型”可以是:Alpha、LAlpha、RAlpha、CAlpha或Numeric。有时还会返回其他属性,例如套管。我想创建对象来对返回的数据进行建模,并且还必须生成xml,其中包含根据给定数据类型格式化的元素值,以便发送回其他系统以执行事务。我开始创建一个表示对象上每个属性的对象,如:

//Type T represents the data type of the Value property
public class OtherSystemField<T> : IOtherSystemField{ 

public string OtherSystemFieldName { get; set;}
public OtherSystemDataTypeEnum OtherSystemDataType { get; set;}
public int Size { get; set;}
public T Value { get; set;}
public string ToOtherSystemString() { ....};

}

//Class using the data field
public OtherSystemEntityClass {

public OtherSystemField<string> f1 { get; set; }
public OtherSystemEntityClass () {
f1 = new OtherSystemField<string>() { 
OtherSystemFieldName = "x", Size = 4, OtherSystemDataType = ...};
f1.Value = "DefaultStringValue"; 
}
}
以下是XML的一个示例:

<COLUMNS>  
<COLUMN header="FieldX" dspname="FieldX" dbname="FIELDX" type="NUMERIC" size="4" /> 
<COLUMN header="FieldY" dspname="FieldY" dbname="FIELDY" type="ALPHARIGHT" size="14"/>        
</COLUMNS> <COLS> <COL><![CDATA[ 1000]]></COL> <COL><![CDATA[ 102]]></COL> </COLS>

我期待着每个人的反馈——我毫不怀疑我会听到好的观点。
性能不是一个很大的问题,因为字段的数量相对较少。另外,这是在.Net 3.5中实现的,您是否已经知道字段的字段名、数据类型、大小等,或者这是您需要在运行时确定的?如果您在设计时已经知道关于字段的所有信息,那么我喜欢属性方法。在处理从旧系统传入的Xml时,我也做了同样的工作。然后,您可以将Xml转换为您的对象,就可以开始了

如果在设计时不知道Xml的格式,也就是说,需要在运行时设置属性值,那么使用属性将比第一种方法更加困难。您需要使用反射设置属性,这比在第一个解决方案中仅设置属性要复杂得多。

我不确定“Alpha”类型是什么,但新添加的XML代码片段清楚地描述了表架构。如果可以实现映射,我实际上可能使用
DataTable
,而不是创建任何自定义类


如果我发现XML实际上是直接从类似于.NET
数据集的东西中序列化的,我也不会感到太惊讶,但是使用的是不同的语言/平台。这些CDATA标签对消费者不友好。但是,如果您可以将
Alpha
值映射到某个枚举类型(很可能是您创建的自定义类型),那么您只需将该类型的列添加到
DataTable

您可以发布一个XML示例吗?我开始写一个答案,但我不完全确定我是否理解规范。哇,XML太可怕了,很高兴我没有发布我的答案,因为它可能太离谱了。您应该将此信息添加到问题中,而不是将其发布在评论中,这样会更容易阅读。@Aaronaught-谢谢,原谅NOOB错误——我把XML放在问题而不是评论中。@ WShanVel--所有的东西都是在编译时知道的。@ WShanVel--谢谢你的反馈。AANONOTE -谢谢你的反馈-我一定会考虑这条路线。您猜测XML的源代码是正确的,并且该语言/平台应该是Cobalt/AS400。我倾向于创建对象的主要原因是,我必须提供的每个事务接口都将有相当多的这些对象传递给它们-传递后,接收者将写回所需的XML格式。@thedugas:您在那里使用了一些我不太熟悉的术语(“事务接口”),但是,如果您必须管理大量数据,那么我认为
DataTable
/
DataSet
肯定是一种方法。但我之所以选择它,主要是因为担心每次XML更改时都必须更改类定义,而使用
DataTable
可以动态构建模式。嗯!我会试试那条路线。至于术语“事务接口”(我应该使用更好的措辞),我的意思是我必须构造XML以发回应用程序网关服务器。与其他一些标记一起,如果使用datatable,我必须从datatables中写出XML元素,如值。再次感谢您的反馈-答案是您的。
<COLUMNS>  
<COLUMN header="FieldX" dspname="FieldX" dbname="FIELDX" type="NUMERIC" size="4" /> 
<COLUMN header="FieldY" dspname="FieldY" dbname="FIELDY" type="ALPHARIGHT" size="14"/>        
</COLUMNS> <COLS> <COL><![CDATA[ 1000]]></COL> <COL><![CDATA[ 102]]></COL> </COLS>