我目前有一个从XML模式生成的C#类,该类用于获取XML文件并更新数据库中的值。

我受困的是这些值之一(由于复杂性和可变性)需要作为独立的xml存储在数据库中,然后我需要在运行时对其进行反序列化。

是否可以定义第二个C#类来处理这一元素而又不干扰主类。

还是重新序列化该节点以进行保存,更改该节点的名称会更简单吗?

编辑:我为缺乏上下文而道歉,已经晚了,我正在门外。 XML文件用于为不同的客户端设置Web表单验证和自定义,至少80%的架构是非常简单的数据(使字段为强制性,应用正则表达式以及隐藏和显示字段是一些示例)

我提到的复杂部分与多个字段之间的条件验证有关。 这是XML外观的示例:

<?xml version="1.0"?>

<Relationships>
    <Relationship xsi:type="MutuallyExclusiveRelationship">
        <Fields>
            <Field Id="lineItemAfeNumber" IsInGrid="true"/>
            <Field Id="lineItemCostCenter" IsInGrid="true"/>
        </Fields>
    </Relationship>     
</Relationships>

<Fields>

    <Field xsi:type="TextField" Id="invoiceNumber">
        <ValidationRegex Value="^[0-9a-zA-Z\-]*$"/>
        <ValidationRegexMessage Value="{0} must be alpha-numeric and can contain dashes."/>
        <MaxLength Value="20"/>
    </Field>

    <Field xsi:type="TextField" Id="afeNumber">
        <InputMask Value="aa999999"/>
        <ValidationRegex Value="^[A-Za-z]{2}[0-9]{6}$"/>
        <ValidationRegexMessage Value="{0} must be in the format AA999999."/>
    </Field>

    <Field xsi:type="TextField" Id="costCenter">
        <ValidationRegex Value="^[a-zA-Z0-9]*$"/>
        <ValidationRegexMessage Value="{0} must be alpha-numeric."/>
        <MinLength Value="8"/>
        <MaxLength Value="9"/>
    </Field>


    <Field xsi:type="TextField" Id="orderNumber">
        <MinLength Value="1"/>
        <MaxLength Value="12"/>
    </Field>

    <Field xsi:type="TextField" Id="generalLedgerCode">
        <InputMask Value="9999.999"/>
        <ValidationRegex Value="^[0-9]{4}\.[0-9]{3}$"/>
        <ValidationRegexMessage Value="{0} must be in the format 0000.000."/>
    </Field>

    <Field xsi:type="TextField" Id="approverId">
        <Label Value="Approver Code"/>
        <MaxLength Value="10"/>
    </Field>

    <Field xsi:type="TextField" Id="leaseWell">
        <Label Value="Location/UWI"/>
    </Field>

    <Field xsi:type="TextField" Id="poNumber">
        <ValidationRegex Value="^[a-zA-Z0-9/-]*$"/>
        <ValidationRegexMessage Value="{0} must be alpha-numeric and can contain '-'."/>
        <MaxLength Value="12"/>
    </Field>

    <Field xsi:type="DropDownField" Id="currency">
        <Label Value="Currency"/>
        <DefaultValue Value="CAD"/>
        <Values>
            <DropDownValue Value="USD"/>
            <DropDownValue Value="CAD"/>
        </Values>
    </Field>    

    <Field xsi:type="TextField" Id="remitToTax">
        <Label Value="GST/HST #"/>
    </Field>

    <Field xsi:type="TextField" Id="detailsComment">
        <Mandatory Value="false"/>
        <MaxLength Value="40"/>
    </Field>    

    <Field xsi:type="TextField" Id="newComment">
        <MaxLength Value="40"/>
    </Field>

    <!-- Attachments -->
    <Field xsi:type="TextField" Id="attachmentFileName">
        <MandatoryMessage Value="Attachments are required."/>
    </Field>

    <Field xsi:type="DropDownField" Id="approverCompanyCode">
        <Mandatory Value="true"/>
    </Field>

    <Field xsi:type="TextField" Id="recipientName">
      <Mandatory Value="true"/>
    </Field>        
</Fields>

<Grids>
    <Grid Id="invoiceDetailsTable">
        <Fields>
            <Field xsi:type="TextField" Id="lineItemDescription">
                <MaxLength Value="40"/>
            </Field>                

            <Field xsi:type="TextField" Id="lineItemAfeNumber">
                <InputMask Value="aa999999"/>
                <ValidationRegex Value="^[A-Za-z]{2}[0-9]{6}$"/>
                <ValidationRegexMessage Value="{0} must be in the format AA999999."/>
            </Field>

            <Field xsi:type="TextField" Id="lineItemCostCenter">
                <ValidationRegex Value="^[a-zA-Z0-9]*$"/>
                <ValidationRegexMessage Value="{0} must be alpha-numeric."/>
                <MinLength Value="8"/>
                <MaxLength Value="9"/>
            </Field>

            <Field xsi:type="TextField" Id="lineItemOrderNumber">
                <MinLength Value="1"/>
                <MaxLength Value="12"/>
            </Field>

            <Field xsi:type="TextField" Id="lineItemLeaseWell">
                <Label Value="Location/UWI"/>
                <Mandatory Value="true"/>
            </Field>

            <Field xsi:type="TextField" Id="lineItemGlAccount">
                <InputMask Value="9999.999"/>
                <ValidationRegex Value="^[0-9]{4}\.[0-9]{3}$"/>
                <ValidationRegexMessage Value="{0} must be in the format 0000.000."/>
            </Field>


            <Field xsi:type="TextField" Id="lineItemPoNumber">
                <ValidationRegex Value="^[a-zA-Z0-9/-]*$"/>
                <ValidationRegexMessage Value="{0} must be alpha-numeric and can contain '-'."/>
                <MaxLength Value="12"/>
            </Field>
        </Fields>
    </Grid>
</Grids>

这里的“关系”部分是我想重新序列化的部分,这显然是该部分可能是一个简单的例子,还有许多未显示的子元素。

===============>>#1 票数:0

将主类保存到数据库时,为什么不序列化此复杂元素? 例如,如果您的班级是这样的:

public class Master
{
    public string simple;
    public Complex complex;
}

您可以使用以下命令将复杂元素另存为db中的xml:

void SaveToDB(Stream file)
{
    XmlSerializer masterSerializer = new XmlSerializer(typeof(Master));
    Master m = (Master)masterSerializer.Deserialize(file);
    //save m.simple to db
    XmlSerializer complexSerializer = new XmlSerializer(typeof(Complex));
    StringWriter complexXmlWriter = new StringWriter();
    complexSerializer.Serialize(complexXmlWriter, m.complex);
    string complexXml = complexXmlWriter.ToString();
    //save complexXml to db
}

这样,您不需要更改主类,就可以将复杂元素保存在xml中。

===============>>#2 票数:0 已采纳

经过进一步的调查和集思广益,我们确定两个不同的序列化类实际上可以存在于不同的范围内,从而消除了我遇到的冲突。

  ask by Phaeze translate from so

未解决问题?本站智能推荐:

2回复

如何在C#中的xml中对对象矩阵进行序列化/反序列化?

我有一项任务要保存和加载扫雷板。 我在保存电路板矩阵时遇到问题。 这些是我的扫雷属性: 平铺属性: 我尝试过这样的事情: 保存到文件中效果很好,但是从文件中加载会导致异常。 而且我真的不知道如何调试它,因为抛出了异常: 任何帮助表示赞赏! 编辑:这是例
2回复

使用模型进行xml序列化/反序列化

我想要实现的是XML输出,例如: 所有汽车数据都存储在单独的XML文件中。 在以下代码的一部分中,我可以使用汽车模型将数据读取到字典中: 问题在于编写字典“ Car”,该字典将所有汽车数据保存到组合的XML输出/输入中。 关于“汽车”模型的外观以及如何调用的任何提示/教程/示
2回复

C#反序列化xml文件

我尝试反序列化xml文件: 我的反序列化类代码看起来像这样: 当我尝试反序列化xml文件时,我总是没有错误,而Item和Table_Name等于null。 为什么? 重播的Thx
1回复

XML反序列化C#

我试图将XML文件反序列化为我的Windows窗体应用程序的Program文件中的对象,如下所示: List<UserAccessGroup> AccessGroups = new List<UserAccessGroup>();
2回复

C#XML将数组字符串序列化/反序列化为数组元素名称

我有一个如下的xml结构: 我想将xml反序列化为以下模型: 我希望Item.Name属性包含元素名称:“ Foo”,“ Bar”。 XML属性有可能吗?
1回复

如何在C#中使用反序列化来过滤xml?

我有一个很大的XML文档。 我的目标是对其进行过滤和反序列化,以便获得对对象结构感兴趣的信息。 这是XML的一部分: 为了重建XML的结构,我构造了此类: 该程序如下所示: 我一方面具有属性TITLE =“ Auftraggeber”的元素,另一方面具有TITLE
2回复

XML反序列化[关闭]

我有一些来自调查系统的XML。 示例结构如下所示: 我的任务是使用System.XML.Serialization引用和[XmlAttribute],[XmlElement]等标志读取XML文件并将其反序列化为C#中的对象。 我不熟悉这种技术,因为我通常对DataSet类型使用标准的
3回复

如何在C#上仅反序列化XML一行?

我在服务上运行一个方法,该方法仅在字符串上返回一行XML: 我正在尝试以这种方式反序列化此行: 但在行 引发异常: 关于我能做什么有什么线索? 我是XML序列化的新手。
1回复

反序列化XML数据

我的XML两次包含元素Z1ZRMPA。 当TITLE =“ Auftraggeber”时,以下(,,...)包含与TITLE =“ Aufstellungsort”时不同的信息。 我使用反序列化方法,并以可行的方式还原对象的状态。 如何分隔两个命名的案例,以便同时获得这两个信息? 那
1回复

WCF,XML反序列化

我有一个简单的WCF服务 和一个简单的测试控制台。 当我将服务引用添加到测试控制台时,My ShoppingCart类将出现在TestConsole reference.cs文件中。 所以我可以在TestConsole项目上这样写: 我的shoppingCart.xml文件是