【问题标题】:How to remove k__BackingField from response json?如何从响应 json 中删除 k__BackingField?
【发布时间】:2020-01-27 13:20:07
【问题描述】:

我尝试从我的 json 响应中删除 k__BackingField。 我使用 Newtownsoft.Json 和 .net core 3.1。

例子是:

"k__BackingField": "00000000-0000-0000-0000-000000000000",

"<Violations>k__BackingField": [
 {},
 {},
 {},
 {},
 {},
 {},
 {},
 {},
 {},
 {},
 {},
 {},
 {},
 {}
],
"<ResultType>k__BackingField": 5,
"<LockOwner>k__BackingField": null
}

所以,数据模型类是:

[JsonObject(MemberSerialization.OptIn)]
[Serializable]
public class DataModel
{
    // [JsonProperty("uid")]
    [DataMember]
    public string uid;

    // [JsonProperty("name")]
    [DataMember]
    public string name;

 /*etc fields*/
}

我尝试使用 Serializable,尝试将其删除,但没有任何反应。 如果我删除 MemberSerialization.OptIn 我有递归错误(我的其他字段)。

那么,我该如何修复k__

谢谢!

【问题讨论】:

  • 请提供MCVE ... 至于您的DataModel,它只有uidname FIELDS(不是属性),这显然不应该发生k__BackingField&lt;..&gt; 来自自动属性
  • 还有Serializable attrubute 看起来很可疑……不应该是DataContract 吗? (这来自第一个谷歌结果......)
  • k__BackingField 用于自动实现的属性,你没有;您确定在 public string ResultType {get;set;} 这样的属性上没有 [field: DataMember] 吗?但是:不,显示的代码不会创建该json - 请您显示一个实际上会执行此操作的对象,理想情况下是您对Json进行的确切调用.NET
  • 您确定您没有使用MemberSerialization.Fields 和自动属性吗?如果是这样:不要那样做
  • @MarcGravell 这是因为Serializable 属性......问题已经被问到......谷歌搜索的第一个结果k__BackingField json

标签: c# json serialization .net-core json.net


【解决方案1】:

听起来就像你实际上在使用MemberSerialization.Fields,即

[JsonObject(MemberSerialization.Fields)]
public class DataModel
{
    public string Name { get; set; }
}

var obj = new DataModel { Name = "abc" };
var json = JsonConvert.SerializeObject(obj);
Console.WriteLine(json);

导致:

{"<Name>k__BackingField":"abc"}

在这种情况下,要么不要这样做(只需删除MemberSerialization.Fields) - 这可以正常工作:

public class DataModel
{
    // optional: [JsonProperty("name")] to change "Name": to "name":
    public string Name { get; set; }
}

给出:

{"Name":"abc"}

(或带有可选位的“名称”)

或者如果您必须使用字段:给它们自定义名称:


[JsonObject(MemberSerialization.Fields)]
public class DataModel
{
    [field: JsonProperty("name")]
    public string Name { get; set; }
}

给出:

{"name":"abc"}

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多