我目前正试图使用"这个";关键字,并将其转换为JSON格式。我可以看到;这个";关键字包含我要查找的所有信息,但当尝试使用JsonConvert.SerializeObject(this)
进行转换时,它会返回一个空字符串。
我已经走上了可能在";这个";值,但得到一个错误,即页面的类不包含GetEnumerator
的定义。我正在寻找一种方法来迭代";这个";通过将其类型转换为CCD_ 3或正确实现CCD_。我的最终目标是获得类似的东西
string jsonData= "";
foreach (var item in this)
{
jsonData += JsonConvert.SerializeObject(item);
}
或者更好的是只字符串
jsonData = JsonConvert.SerializeObject(this);
一个更合适的例子可以是在一个文件";页面/索引";具有
@page "/home"
<h2>HELLO WORLD</h2>
@code{
int tester = 13;
NavigationManager navMan = new NavigationManager();
UserService user = new UserService();
}
理论上我可以做
string jsonData = "";
jsonData += JsonConvert.SerializeObject(this.user);
jsonData += JsonConvert.SerializeObject(this.navMan);
...
这将正确工作,但考虑到一些页面包含数百个变量,这将非常耗时。
通过在调试器中运行服务器;这个";它包含之类的东西
navMan | Microsoft.AspNetCore.Components.Server.Circuits.RemoteNavigationManager
user | Services.UserService
tester | 13
其本身通过扩展一个类似于";用户";我可以看到它包含名称、电子邮件等的值。
通过执行jsonData += JsonConvert.SerializeObject(this.user);
,我可以取回保存到jsonData
中的名称、电子邮件等变量名称和值,但我想对"中的每个对象执行此操作;这个";而不必将每个变量硬编码到SerializeObject
函数中
JsonConvert.SerializeObject(this);
返回空json的原因是默认情况下Newtonsoft.json只序列化公共成员。因此,我通过添加启用了所有成员的序列化。
@attribute [JsonObjectAttribute(MemberSerialization = MemberSerialization.Fields)]
然后我得到了异常"检测到自引用循环…"所以为了解决这个问题,我补充道。
string jsonData = JsonConvert.SerializeObject(this, new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
之后,我得到了异常"此平台不支持操作"。所以在这一点上我停止了,因为试图序列化整个剃须刀组件似乎是个坏主意。
因此,与其说这些废话,我建议简单地手动将[JsonProperty]
添加到您想要序列化并希望获得最佳效果的成员中:
@page "/home"
<h2>HELLO WORLD</h2>
@code {
[JsonProperty]
int tester = 13;
[JsonProperty]
[Inject]
NavigationManager navMan { get; set; }
[JsonProperty]
UserService user = new UserService();
protected override void OnInitialized()
{
string jsonData = JsonConvert.SerializeObject(this);
}
}