如何在 c# 和 Blazor 中循环访问"this"关键字



我目前正试图使用"这个";关键字,并将其转换为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);
}
}

相关内容

  • 没有找到相关文章

最新更新