我写了一个类(下面的代码片段),它有一些数据成员,我从客户端放置数据。我应该通过Web Services发送这些数据,这是一个包含我的数据成员的类,但是我的类有更多的数据成员。
我应该从我的类型转换为另一种类型。
问题在于我不知道如何访问数据成员来从中获取数据。
我的所有数据都进入了这个对象“OBJ”:
__XtraInvoiceInfo OBJ = new __XtraInvoiceInfo();
,Web Services的类型是“InvoiceWithEntriesInfo”
var convertedObj = new InvoiceWithEntriesInfo()
{
invoiceNumber = OBJ.BasicInfo.InvoiceNumber --> member is not access.
| Equals
Visual Studio suggests | GetHashCode
only these methods | GetType
| ToString
invoiceDate = OBJ.BasicInfo.InvoiceDate *--> member is not accessible
firstName = OBJ.Payer.FirstName *-->> not accessible
lastName = OBJ.Payer.LastName *-->> not accessible
catem = OBJ.Payer.Catem *-->> not accessible
};
错误“成员无法访问”表示* - > 'object'不包含'InvoiceDate'的定义,也没有扩展方法'InvoiceDate'接受类型'object'的第一个参数(你是否缺少using指令或汇编引用?)
public sealed class __XtraInvoiceInfo
{
private long _payerType = -1;
public long PayerType
{
get
{
return this._payerType;
}
set
{
this._payerType = value;
if (value == Constants.NATURAL_PAYER)
{
this.Payer = new __NaturalInvoiceInfo();
}
}
}
public object Payer
{
get; set;
}
public object BasicInfo
{
get; set;
}
//-- Nested Types --
public sealed class __NaturalInvoiceInfo
{
public string FirstName
{
get; set;
}
public string LastName
{
get; set;
}
public long Catem
{
get; set;
}
}
public sealed class __BasicInvoiceInfo
{
public long InvoiceNumber
{
get; set;
}
public DateTime? InvoiceDate
{
get; set;
}
}
}
我制作了Payer和BasicInfo属性,因为通过它们我从客户端获取数据,并且我以这种方式对我的成员进行了子绑定:
model.BindModel(xii =>
{
var bindModel = new ValidationFrameBindModel<__XtraInvoiceInfo.__BasicInvoiceInfo>();
this.BindControls(bindModel);
model.BindModel<__XtraInvoiceInfo.__BasicInvoiceInfo>((x,b) => x.BasicInfo = b, bindModel);
});
非常感谢你!如果你有能力回答我的问题。 如果需要,我准备说出更多细节。
答案 0 :(得分:2)
这就是问题所在:
public object Payer { get; set; }
public object BasicInfo { get; set; }
您只是将属性声明为object
类型 - 为什么不给它们更多有用的类型?如果你不知道这些类型,你怎么知道那里有什么属性?你能创建抽象基类或接口来声明你想要保证的所有属性吗? (说实话,很难说你要做什么。)
如果您使用的是C#4和.NET 4,可以让它们变得动态:
public dynamic Payer { get; set; }
public dynamic BasicInfo { get; set; }
然后访问子属性将在执行时绑定实际类型的对象。
另请注意,请不要使用__
为类型名称添加前缀 - C#规范使用__
为编译器特定的功能保留标识符。从第2.4.2节:
包含两个连续下划线字符(U + 005F)的标识符保留供实现使用。例如,实现可能会提供以两个下划线开头的扩展关键字。