XmlSerializer不会序列化只读字段,只读属性(仅限于getter),私有字段等.此外,如果类没有无参数构造函数,它将不会序列化对象.我的问题:
AFAIK出现这些问题是因为在反序列化时无法访问(和更改)私有(和只读)字段.但是,如果我不反序列化怎么办?我不能选择这个吗?
由于相同的原因(反序列化问题),如果类没有无参数构造函数,它不会序列化对象.但是当我添加一个私有的无参数构造函数时,它工作正常.怎么样?
我不喜欢向每个类添加无参数构造函数,并且将所有字段设置为public和non-readonly只是为了能够序列化它.现在我在private无参数构造函数中抛出异常以防止使用.构造函数是否有一个属性告诉编译器只能对该构造函数进行授权调用?如果不是,至少我想用一个属性标记它,如果它被调用则抛出异常.
我正在使用Newtonsoft.Json来序列化/反序列化对象.
据我所知,如果类没有无参数构造函数,则反序列化无法成功.例,
public class Dog
{
public string Name;
public Dog(string n)
{
Name = n;
}
}
Run Code Online (Sandbox Code Playgroud)
对于下面这个类,代码正确生成对象.
Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{\"Name\":\"Dog1\"}");
Run Code Online (Sandbox Code Playgroud)
对我来说,令人惊讶的是,它也可以使用以下代码正确生成对象.
Dog dog2 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{\"name\":\"Dog2\"}");
Dog dog3 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{\"n\":\"Dog3\"}");
Dog dog4 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{\"N\":\"Dog4\"}");
Run Code Online (Sandbox Code Playgroud)
现在我能想到的就是
这是我的问题:
如果我的班级是这样的,
public class Dog
{
public string Name;
public Dog(string name)
{
Name = name + "aaa";
}
}
Run Code Online (Sandbox Code Playgroud)
和生成对象
Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{\"Name\":\"Dog1\"}");
Run Code Online (Sandbox Code Playgroud)
然后创建对象给我dog1.Name = "Dog1aaa"而不是dog1.Name = "Dog1".如何正确反序列化对象(可能Name在创建对象后重写)?有没有办法严格反序列化?
提前致谢
为了钱,我使用的自定义值类型只包含一个decimal字段.简化代码如下.
public struct Money
{
private decimal _value;
private Money(decimal money)
{
_value = Math.Round(money, 2, MidpointRounding.AwayFromZero);
}
public static implicit operator Money(decimal money)
{
return new Money(money);
}
public static explicit operator decimal(Money money)
{
return money._value;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的项目中使用这个结构时,有时会产生歧义.而且有时候我设置的object是一个常数,应该是一个Money.现在我正在初始化对象,比如
object myObject=(Money)200;
Run Code Online (Sandbox Code Playgroud)
我可以为自定义类型指定后缀吗Money?我想用以下内容初始化对象.
object myObject=200p;
Run Code Online (Sandbox Code Playgroud) 如果我在代码中的某处放置断点,那么当程序即将读取该行代码时它就会暂停.
有时程序运行时,我想暂停它.我不知道它目前正在阅读哪一行代码.是否有可能暂停执行,就像在那里存在断点一样?
我经常使用一个switch-case,并为所有enum项创建一个case.
是否有一个快捷方式(它可能是一个resharper快捷方式)自动创建所有案例并让我填写案例?
或者这个问题与代码片段主题有关吗?是否可以创建动态代码片段(它会根据枚举类型而有所不同)?
使用AngularJS,我正在设置HTML表单元素,其中包含$ scope内的一些数据.
<select style='width:300px' size='10' ng-model='selected' ng-options='k as v for (k,v) in options' />
Run Code Online (Sandbox Code Playgroud)
在此示例中,size设置为10.但我想根据$ scope内的某个值来设置它.有办法吗?
我浪费了很多时间来处理报告中的数据.使用数据透视表是一个好主意,但如何?我尝试了一些免费PivotTable课程,但他们缺少小计.
然后,另一种方法.对于excel报表输出我使用EPPlus.它还支持pivottable.问题是我们的一些客户没有办公室(OpenOffice,MicrosoftOffice等),所以只创建和保存xlsx文件不起作用.我唯一可以尝试的EPPlus是创建一个ExcelPackage,用数据填充工作表,然后创建一个PivotTable带数据.
我有几个问题;
1)从该PivotTable对象可以访问PivotTable字段和值的输出.(到目前为止我不能).
2)与上述问题相关... xlsx文件是否包含有关PivotTables的数据或仅包含创建规则的数据PivotTable(如表名,sourceRange,rowFields,columnFields,dataFields,聚合选项等).我对此做了一个小测试.步骤如下:
事实上我的猜测是"数据透视表会根据新数据更新",但我错了.它没有更新.这可能是"xlsx文件不仅包含数据透视表的规则,还包含它的所有值"的证明.如果是这样,我希望在不保存文件的情况下访问该数据(我不需要任何办公程序).
3)任何其他方法表示赞赏.
提前致谢
Ctrl-M+ Ctrl-S正在折叠当前块.但是这个块可以是一种方法.
崩溃当前地区是否有捷径?
#region My Region
// group of methods
#endregion
Run Code Online (Sandbox Code Playgroud) 我认为这!是一个非常小的迹象,使条件具有负面意义.我可以使用一些替代方案或创建我自己的关键字(我想使用not,但如果它是保留关键字,任何东西都可以.).
c# ×8
angularjs ×1
attributes ×1
epplus ×1
excel ×1
json ×1
json.net ×1
resharper ×1
struct ×1
value-type ×1