gpt4 book ai didi

C# JavaScriptSerializer 序列化接口(interface)中不存在但存在于原始对象中的字段

转载 作者:太空宇宙 更新时间:2023-11-03 22:35:42 24 4
gpt4 key购买 nike

我正在尝试序列化一个没有某些字段的对象。我试图定义没有这些字段的接口(interface),然后对其进行转换和序列化,但 JavaScriptSerializer 也包含这些字段。

interface iStam {
public int a {
get;
set;
}
}

class Stam :iStam{
private int _a = 0;
public int a {
get {return _a;}
set {_a = value;}
}
public int b = 0;
}


void fun() {
Stam s = new Stam();
/*
s.a == 0;
s.b == 0;
*/
iStam _s = (iStam) s;
/*
_s.a == 0;
_s.b Not exists! compilation error.
*/

JavaScriptSerializer jss = new JavaScriptSerializer ();
Console.WriteLine(jss.Serialize(_s));
}

预期:

{
"a":0
}

得到:

{
"a":0,
"b":0,
}

为什么?

最佳答案

这里的问题似乎是 JavaScriptSerializer.Serialize() 接受一个 object 参数,而不是泛型类型,它根据类签名序列化对象不像你转换到的界面。 JavaScriptSerializer 比较旧(可能已弃用),建议使用 Newtonsoft.Json或现在的另一个序列化程序。

但是,如果您别无选择,只能使用 JavaScriptSerializer,那么您可以使用 ScriptIgnore 注释您不想序列化的属性和字段。属性。

在类 Stam 中:

[ScriptIgnore]
public int b = 0;

像以前一样调用但不需要转换:

Stam s = new Stam();
JavaScriptSerializer jss = new JavaScriptSerializer();
Console.WriteLine(jss.Serialize(s));

输出:

{"a":0}

如果您需要更大的灵 active ,并且又不能转移到更现代的序列化程序,那么您需要编写 JavaScriptConverter .

关于C# JavaScriptSerializer 序列化接口(interface)中不存在但存在于原始对象中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55238671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com