Come omettere Ottieni solo proprietà in serializzatore json di servicestack?

Ho un object che sto de-serializzando usando il ToJson() dallo spazio dei nomi ServiceStack.Text.

Come omettere tutte le sole proprietà di GET durante la serializzazione? C’è qualche attributo come [Ignore] o qualcosa con cui posso decorare le mie proprietà, in modo che possano essere omessi?

Grazie

Gli serializzatori di testo di ServiceStack seguono il comportamento del serializzatore di DataContract di .NET, il che significa che puoi ignorare i membri dei dati utilizzando l’attributo di opt-out [IgnoreDataMember]

 public class Poco { public int Id { get; set; } public string Name { get; set; } [IgnoreDataMember] public string IsIgnored { get; set; } } 

Un’alternativa opt-in è quella di decorare tutte le proprietà che vuoi serializzate con [DataMember] . Le proprietà rimanenti non sono serializzate, ad es .:

 [DataContract] public class Poco { [DataMember] public int Id { get; set; } [DataMember] public string Name { get; set; } public string IsIgnored { get; set; } } 

Infine c’è anche un’opzione non intrusiva che non richiede attributi, ad esempio:

 JsConfig.ExcludePropertyNames = new [] { "IsIgnored" }; 

Specifica dynamic delle proprietà che devono essere serializzate

I serializzatori di ServiceStack supportano anche la serializzazione del controllo dinamico fornendo convenzionalmente i ShouldSerialize({PropertyName}) per indicare se una proprietà deve essere serializzata o meno, ad esempio:

 public class Poco { public int Id { get; set; } public string Name { get; set; } public string IsIgnored { get; set; } public bool? ShouldSerialize(string fieldName) { return fieldName == "IsIgnored"; } } 

Altri esempi in ConditionalSerializationTests.cs

Per i membri nullable, hai anche la possibilità di impostarlo su null prima della serializzazione.

Ciò è particolarmente utile se si desidera creare un modello di visualizzazione / api singola che viene riutilizzato per diverse chiamate API. Il servizio può ritoccarlo prima di impostarlo sull’object risposta.

Esempio:

  public SignInPostResponse Post(SignInPost request) { UserAuthentication auth = _userService.SignIn(request.Domain, true, request.Username, request.Password); // Map domain model ojbect to API model object. These classs are used with several API calls. var webAuth = Map(auth); // Exmaple: Clear a property that I don't want to return for this API call... for whatever reason. webAuth.AuthenticationType = null; var response = new SignInPostResponse { Results = webAuth }; return response; } 

Mi piacerebbe che ci fosse un modo per controllare dynamicmente la serializzazione di tutti i membri (compresi quelli non annullabili) per endpoint.