Search code examples
servicestackservicestack-text

Serializing CustomUserSession in ServiceStack


We're trying to use Redis ICacheClient with a CustomUserSession, but our custom properties are not stored. The problem seems to be in the json created by serializer.

Here a test:

public class CustomUserSession : AuthUserSession
{
    public string Test { get; set; }
}

[TestFixture]
public class UserSessionJsonTest
{
    private CustomUserSession session;

    [Test]
    public void CanSerializeToJson()
    {
        session = new CustomUserSession()
        {
            UserName = "Ivan",
            Address = "Address1",
            Test = "123"
        };
        JsConfig<CustomUserSession>.ExcludeTypeInfo = false;
        JsConfig<CustomUserSession>.IncludeTypeInfo = true;
        var json = JsonSerializer.SerializeToString(session);
        Debug.WriteLine(json);
        Assert.That(json.Contains("123"));
    }
}

Test is not serialized at all, any hint?


Solution

  • In v4, attributes are inherited and because AuthUserSession is a DataContract, where the serialization is opt-in, you need to mark each property you want to serialize with [DataMember], e.g:

    public class TestUserSession : AuthUserSession
    {
        [DataMember]
        public string Test { get; set; }
    }