【问题标题】:What is this object property这个对象属性是什么
【发布时间】:2015-01-18 04:11:16
【问题描述】:

我的工具从 XML 生成了一个代码,在里面我可以看到,但看不懂

    [System.Xml.Serialization.XmlElementAttribute("Request", typeof(RequestType), Order = 0)]
    [System.Xml.Serialization.XmlElementAttribute("Response", typeof(ResponseType), Order = 0)]
    public object Item
    {
        get
        {
            return this.itemField;
        }
        set
        {
            if ((this.itemField != null))
            {
                if ((itemField.Equals(value) != true))
                {
                    this.itemField = value;
                    this.OnPropertyChanged("Item");
                }
            }
            else
            {
                this.itemField = value;
                this.OnPropertyChanged("Item");
            }
        }
    }

为什么类型是对象,然后如何知道它是什么类型继续处理?

【问题讨论】:

  • 您可能在 XSD 中做了一些不能很好地转换为 C# 的操作...检查名称为“请求”和“响应”的元素。问问自己:代码应该如何生成?如何更改 XSD 以使生成的代码更加面向对象?
  • 另外,请发布 XSD...
  • 你是用它来调用网络服务吗?
  • 是的,我无法更改 XSD

标签: c# .net xml oop properties


【解决方案1】:

代码的意思是Item 可以接受RequestTypeResponseType 类型的对象,并将被序列化/反序列化为RequestTypeResponseType。这完全取决于 XSD 的设计方式。

在您的情况下,我认为 XML 中的 RequestResponse 元素是另一个元素的一部分。何时使用Request 以及何时使用Response 纯粹是动态的。前往 Web 服务的示例请求如下所示

<root>
<header>
</header>
<request>
....
</request>
</root>

来自网络服务的示例响应如下

<root>
<header>
</header>
<response>
....
</response>
</root>

你生成的参考/代理类可能是这样的

public partial class Root {

public Header HeaderValue {
get { ... }
set { ... }
}

// then the item object
public object Item {
get { ... }
set { ... }
} 

}

在构建您的请求时,您会预先知道要使用哪种对象类型。前任。它将是 Request 对象类型。所以你的代码会是这样的

Root root = new Root();
RequestType requestType = new RequestType();
requestType.someProperty = someValue;
...
objRoot.Item = requestType;

当它序列化时,它与Request 元素一起消失。从类型为 Response 的 Web 服务返回时也是如此。

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 2019-06-12
    • 2014-09-22
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多