我有一个Java Web服务,我在.Net中实现一个客户端。现在我遇到了类似这样的问题:Java Webservice and .NET client dropping DateTime objects。 我知道如何设置一个标志,当我有一个值属性,但我需要一个方法,将自动设置该标志。例如(我删除的属性,以增加可读性):方法什么根据属性值设置标志
public class MyClass
{
private System.DateTime endDateTimeField;
private bool endDateTimeFieldSpecified;
private System.DateTime startDateTimeField;
private System.DateTime firstDriverStartField;
private System.DateTime firstDriverEndField;
private System.DateTime secondDriverStartField;
private bool secondDriverStartFieldSpecified;
private System.DateTime secondDriverEndField;
private bool secondDriverEndFieldSpecified;
private string exciseNumberField;
private double gasCounterEndField;
private double gasCounterStartField;
private string idField;
private double mileageStartField;
private double mileageEndField;
private obtcStatus obtcStatusField;
private string secondDriverField;
}
与简单类型的所有财产都自动添加“myProperty的” +指定。 我需要一个方法来检查整个对象,或者它是否具有MyProperty/MyPropertySpecified对,并且如果MyProperty设置为非null值,则将MyPropertySpecified标志设置为true。
编辑: 我的问题关注字段: private System.DateTime endDateTimeField; private bool endDateTimeFieldSpecified;
private System.DateTime secondDriverStartField; private bool secondDriverStartFieldSpecified;
private System.DateTime secondDriverEndField; private bool secondDriverEndFieldSpecified;
大概我可以使用这样的事情:
公共静态无效SetProperyValue(obj对象) { IEnumerable的道具= obj.GetType()的GetProperties() 。凡(X => x.Name = =“endDateTimeField”|| x.Name ==“endDateTimeFieldSpecified”);
if (props?.Count() == 2 &&
props.FirstOrDefault(x => x.Name == "endDateTimeField").GetValue(obj) != null)
props.FirstOrDefault(x => x.Name == "endDateTimeFieldSpecified").SetValue(obj, true);
}
但我不想在刚性
我不明白如果你需要的方式不知道属性名称,那么你只能使用反射。 –
你到目前为止尝试过什么? – Sefe
@Newer:你能回答我的问题吗?你知道编译时的属性名称吗?否则,很难找到相关的价值属性的类型。因为没有'Int'类型(它是'System.Int32')。所以你还需要一个字典来将你的缩写名称翻译成真正的.NET类型。 –