Подтвердить что ты не робот

Как удалить $id во время сериализации JSON

Я использую NewtonSoft.JSON... После JsonConvert.SerializeObject(myObject). Он добавляет $id... как

"$ id": "1", "Бронирование": 0, "CompanyId": 0, "IsCashBooking": false, "PaymentMethod": 0, "IsReferral": false, "IsReferralPercent": false, "ReferralPaymentType": 0, "ReferralDues": 0, "PassengerId": 0, "DepartmentID": 0, "CostCenterID": 0, "DeadMiles": 0

можно удалить этот $id с помощью JsonSerializerSettings или любым другим способом, если да, то как...

4b9b3361

Ответ 1

Я добавил этот код в свой метод регистрации WebApiConfig, и я избавился от всего $id в JSON.

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;

Ответ 4

Чтобы удалить $id в JSON для моего веб-API. Я включил [JsonObject (IsReference = false)] для объектов класса и [JsonProperty (IsReference = false)] для моих свойств, которые относятся к типам объектов. В моем случае свойство RespObj является общим типом T и может принимать любой тип объекта, который я передаю ему, включая коллекции, поэтому мне пришлось использовать [JsonProperty (IsReference = false)], чтобы избавиться от $id в сериализованной строке JSON.

Я не изменял свой WebApiConfig, потому что я использовал справочную страницу MVC для WEB API, и мне потребовалась такая конфигурация в моем веб-приложении:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All;
        json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize;

Объект класса

[DataContract(IsReference = true)]
[JsonObject(IsReference = false)]
public class QMResponse<T> where T : new()
{
    public QMResponse()
    {

    }

    /// <summary>
    /// The response code
    /// </summary> 
    public string RespCode { get; set; }

    /// <summary>
    /// The response message
    /// </summary> 
    public string RespMxg { get; set; }

    /// <summary>
    /// The exception message
    /// </summary> 
    public string exception { get; set; }

    /// <summary>
    /// The object type returned
    /// </summary>         
    [JsonProperty(IsReference = false)]
    public T RespObj { get; set; }

    /// <summary>
    /// No of records returned
    /// </summary> 
    public long RecordCount { get; set; }

    /// <summary>
    /// The Session Object
    /// </summary> 
    public string session_id { get; set; }

}

Ответ 5

Пользовательская настройка ContractResolver переопределяет настройку PreserveReferencesHandling.

В вашей реализации DefaultContractResolver/IContractResolver добавьте это:

public override JsonContract ResolveContract(Type type) {
    var contract = base.ResolveContract(type);
    contract.IsReference = false;
    return contract;
}

Это ведет себя аналогично настройке PreserveReferencesHandling.None без пользовательского ContractResolver

Ответ 6

Вы можете сохранить базовую конфигурацию:

Newtonsoft.Json.PreserveReferencesHandling.All;

Я использовал этот код для своих методов

public JsonResult<T> Get()
{
    return Json(result);
} 

Это отлично работает для меня.