Как удалить k__BackingField из ответа json? - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь удалить k__BackingField из моего json ответа. Я использую 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__?

Спасибо!

1 Ответ

3 голосов
/ 27 января 2020

Это звучит , как будто вы на самом деле используете 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"}
...