1

我在标题中提到了 C#,但这是一个通用的编程问题。我只是想找到执行以下操作的最佳方法:

我有 tableA 包含以下字段

ID : 1
ProjectName : "Test"
City : "NY"
Size : 100
Location : "USA"

现在我需要为第 3 方应用程序序列化该表,但是我的应用程序使用通用数据协定(见下文),此外还必须稍微修改字段名称。所以上表将被序列化如下:

<Object>
<type>Project</type>
<Fields>
<Key>NameofProject</Key><Value>Test</value>
<Key>ProjectCity</Key><Value>NY</value>
<Key>ProjectLocation</Key><Value>USA</value>
</Fields>
</Object>

如您所见,我需要将 TableA 中的字段映射到新的字段名称/键:

ProjectName -> NameofProject
City -> ProjectCity
Location ->ProjectLocation

这就是我实现上述目标的方式: - 创建一个映射表,用于存储如上所述的映射关系

InputField -> OutputKey
ProjectName -> NameofProject
City -> ProjectCity
Location ->ProjectLocation

I would then load the data from this table into a Set
I would then loop through each row of the input
- for each column in the row I would get the OutputKey based on the InputField as stored in my mapping Set, and build the xml

我假设在 Set 中存储少量信息,然后对每个字段进行查找应该不会太糟糕。但我不是一个有经验的 C# 用户,所以想知道在 C# 中是否有更好的方法来做到这一点。任何帮助或方向将不胜感激。

编辑:建议使用 XSLT 的评论 - 这是一个好主意,但由于此任务的其他复杂性,我最好根据数据合同在代码中构建 xml。有没有办法通过输入数据表和映射表的sql连接来实现映射?

4

1 回答 1

1

如果您有一组固定的映射,您可以使用DataContractSerializer或通过完成此操作XmlSerializer,然后使用不同名称装饰成员,如下例所示。

第一个使用 the DataContractSerializer,后者使用XmlSerializer

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

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

[Serializable]
public class Project1
{
    [System.Xml.Serialization.XmlAttribute(AttributeName = "ProjectName")]
    public string ProjName { get; set; }
}

正如我们在此处看到的,模型将模仿您的表结构,并且属性将用于在序列化时以属性的自定义名称呈现数据。

于 2013-05-05T11:38:41.770 回答