我需要创建一个可以接受类似于这个xsd的键值对的对象

本文关键字:类似于 xsd 对象 键值对 创建 一个 | 更新日期: 2023-09-27 18:12:10

这是一个将存储在数据库中的模板的XSD示例。"to_email","first_name"等都是令牌,我需要动态创建一个字典或一个对象,可以返回给客户端,将给出这些令牌的列表。这背后的想法是,如果在模板中有任何变化,那么我们将只是在数据库中插入另一个值,它应该自动创建动态返回给客户端,当他们将查询这个模板。我如何创建/解析它?我不想创建具有单个元素的类对象,因为这意味着我将不得不为每次添加元素而更改它。所以它必须是通用的
我们应该能够根据客户端请求返回JSON或XML的集合。我该怎么做呢?任何帮助都会很感激。提前谢谢你。

   <?xml version="1.0" encoding="utf-8"?>
     <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"  
      elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" 
       xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
          xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="claim">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to_email" type="xs:string"/>
      <xs:element name="first_name" type="xs:string"/>
      <xs:element name="last_name" type="xs:string"/>
      <xs:element name="url" type="xs:string"/>
      <xs:element name="received_date" type="xs:date"/>
      <xs:element name="contact_number" type="xs:string"/>
      <xs:element name="employer_name" type="xs:string"/>
      <xs:element name="er_label" type="xs:string"/>
      <xs:element name="er_flag" type="xs:integer"/>
      <xs:element name="benefit_id" type="xs:integer"/>
      <xs:element name="employee_id" type="xs:integer"/>
      <xs:element name="employer_id" type="xs:integer"/>
      <xs:element name="form_id" type="xs:integer"/>
      <xs:element name="er_url" type="xs:string"/>
      <xs:element name="tax" type="xs:string"/>
      <xs:element name="Repeater" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="form_id" type="xs:integer"/>
            <xs:element name="amount" type="xs:integer"/>
            <xs:element name="expense_name" type="xs:string"/>
            <xs:element name="date_of_service" type="xs:string"/>
            <xs:element name="status_of_claim" type="xs:string"/>
            <xs:element name="status_reason"/>
            <xs:element name="Order_by" type="xs:integer"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
   </xs:complexType>
 </xs:element>
</xs:schema>

添加进一步注释:

对客户端的响应应该类似于表示字段的对象的每个属性。例如一个对象。

{
  ‘field1’: <FieldDefinition>
  ‘field2’: <FieldDefinition>
  ‘field3’: <FieldDefinition>
  .
  .
  .
}

对象将包含以下属性,如类型,例如,如果它是一个字符串或int,显示名称,即内部名称可以是first_name,但显示名称将是FirstName#等。也可以是一个数组。这让事情变得更复杂了。

我说的有意义吗?

我需要创建一个可以接受类似于这个xsd的键值对的对象

我相信您可以进行XML处理,或者您可以在Google中找到。有很多这样的例子。我只是添加了您提到的属性的逻辑代码。//你的XML处理

        var fields = new List<FieldDefinition>
        {
            new FieldDefinition{ Type="string", DisplayName="FirstName"},
            new FieldDefinition{ Type="int", DisplayName="EmployeeId"}
        };
        var infr = new List<Infrastructure>
        {
            new Infrastructure { def1=fields.FirstOrDefault()}// loop through to assign each item
        };
        foreach (var item in infr)
        Console.WriteLine(item.def1.DisplayName + " -" + item.def1.Type);
        Console.Read();
    }
}
public class Infrastructure
{
    public FieldDefinition def1 { get; set; }

}
public class FieldDefinition
{
    public string Type { get; set; }
    public string DisplayName { get; set; }
}

使用xsd.exe util

为它们生成类

所示:如何从xsd生成。net 4.0类?

xsd your.xsd /classes

可以使用XPath查询或任何通用XML处理来解析模板。对于任何模板更改,你可以为File选择CacheDependency。您只需缓存整个xml,如果对标记/文件有任何更改,则将该部分插入数据库并重新加载缓存。您也可以尝试SQLDependency来获得类似的工作。

另一个选项,您可以使用filesystemwatcher,它将在文件内容更改时引发事件。然后只需将添加的部分插入数据库。