【问题标题】:How to catch/send XML doc with various sub arrays?如何使用各种子数组捕获/发送 XML 文档?
【发布时间】:2013-11-27 00:26:04
【问题描述】:

我正在使用一些 Web 服务,但遇到了一些我无法解决的难题。我正在处理主对象数组中另一个对象数组中的对象数组。

我正在使用这样的各种对象:

公共类 OBJECT1

{

公共字符串 item1;

公共字符串 item2;

公共字符串 item3;

}

公共类 OBJECT2

{

公共字符串 item1;

公共字符串 item2;

公共 OBJECT1[] item3;

}

公共类 OBJECT3

{

公共字符串 item1;

公共字符串 item2;

公共 OBJECT2[] item3;

}

所以当我根据三个对象之一中的一个元素查询数据库时,我的困惑就出现了。

让我解释一下:

当我从 OBJECT1 中搜索一个元素时,我可以从其他对象中获取 1 个或多个项目。问题是:如何将所有信息放入表、XML 文档或数据集中?我真的不知道从哪里开始,因为我想做一个这样的结构:

对象3[N]

项目1

项目2

对象2[1] 项目 1 项目2

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

对象2[2] 项目 1 项目2

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

对象2[3] 项目 1 项目2

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

。 . . 对象2[N] 项目 1 项目2

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

.

.

.

对象3[N]

项目1

项目2

对象2[1] 项目 1 项目2

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

对象2[2] 项目 1 项目2

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

对象2[3] 项目 1 项目2

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

。 . . 对象2[N] 项目 1 项目2

 Object1[1]
     item1
     item2
     item3
  Object1[2]
     item1
     item2
     item3
  Object1[3]
     .
     .  
     .
  Object1[N]

我真的不知道从哪里开始捕捉这个。我已经得到了结构,但我需要一个关于从哪里开始的提示。我希望你们能帮助我。

我正在使用 Visual Studio 2008 C# 和 SQL Server 以及 Web 服务。

希望有人能帮帮我,谢谢。

您好。

【问题讨论】:

    标签: c# xml arrays web-services


    【解决方案1】:

    您可以使用内置的DataContract 功能将您的对象图转换为具有您提到的嵌套的 XML 文档。

    两部分:

    1. 用适当的属性注释你的类。

      [DataContract(Namespace = "DataContracts")]
      public class Foo
      {
          [DataMember]
          public string First;
      
          [DataMember]
          public string Second;
      
          [DataMember]
          public string Third;
      
      }
      
      [DataContract(Namespace = "DataContracts")]
      public class Bar
      {
          [DataMember]
          public string First;
      
          [DataMember]
          public string Second;
      
          [DataMember]
          public Foo[] ManyFoos;
      }
      
      [DataContract(Namespace = "DataContracts")]
      public class Root
      {
          [DataMember]
          public string First;
      
          [DataMember]
          public string Second;
      
          [DataMember]
          public Bar[] ManyBars;
      }
      
    2. 使用 DataContractSerializer 将您的对象图转换为 XML 文档。

      var root = new Root()
      {
          ... snip, object initialization ...
      };
      
      var serializer = new DataContractSerializer(typeof(Root));
      var xmlStringBuilder = new StringBuilder();
      using (var xmlWriter = XmlWriter.Create(xmlStringBuilder, new XmlWriterSettings() { Indent = true }))
      {
          serializer.WriteObject(xmlWriter, root);
      }
      
      var xmlString = xmlStringBuilder.ToString();
      

    这会产生以下 XML(无论如何都是我的示例)。

    <?xml version="1.0" encoding="utf-16"?>
    <Root xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="DataContracts">
      <First>Root01_First</First>
      <ManyBars>
        <Bar>
          <First>Bar01_First</First>
          <ManyFoos>
            <Foo>
              <First>Foo01_First</First>
              <Second>Foo01_Second</Second>
              <Third>Foo01_Third</Third>
            </Foo>
            <Foo>
              <First>Foo02_First</First>
              <Second>Foo02_Second</Second>
              <Third>Foo02_Third</Third>
            </Foo>
          </ManyFoos>
          <Second>Bar01_Second</Second>
        </Bar>
        <Bar>
          <First>Bar02_First</First>
          <ManyFoos>
            <Foo>
              <First>Foo03_First</First>
              <Second>Foo03_Second</Second>
              <Third>Foo03_Third</Third>
            </Foo>
          </ManyFoos>
          <Second>Bar02_Second</Second>
        </Bar>
      </ManyBars>
      <Second>Root01_Second</Second>
    </Root>
    

    【讨论】:

    • 非常感谢,这对我有很大帮助......我不知道从哪里开始挖掘。
    • 如果它帮助您/回答了您的问题,请不要忘记投票/标记为答案。这就是 Stack Overflow 系统的工作原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多