Teknikdagboken En blogg om teknik i vardagen

19Mar/120

Databasproblem i MVC Music Store

Jag har börjat lyft av jonkopingsok.nu från ASP/VBScript till MVC3 och ville titta på lite andra lösningar för att se hur de fungerar. En av de mest kända är MVC Music Store men när jag försökte starta den fick jag felkod Unable to find the requested .Net framework data provider. Jag hade SQL Server 2008 R2 och VS2010 Premium SP1 men tydligen saknades ändå någon data provider för SQL Server Compact 4.0. Följ länken och installera så bör det fungera.

Om du testar applikationne och försöker logga in på admin-delen måste du först ge ditt nya konto rollen Administrator. Detta kan göras via ASP.Net Web Site Administration Tool som man kommer åt via Visual Studio -> Project -> ASP.Net Configuration. Eller så loggar du in med det förskapade administratörskontot som jag inte vet lösenordet på men som borde stå i guiden på asp.net.

4Mar/110

Serialisera objekt till json med camelCase

För att serialisera ett objekt till json i MVC3 kan man använda Json(), men då skapas objektet som serialiseras med fel namn i JavaScript där camelCase används. För att fixa detta kan man använda DataContractJsonSerializer. Här är min lösning:

public class JsonHelper
{
    public static string Serialize<T>(T obj)
    {
        var serializer = new DataContractJsonSerializer(obj.GetType());
        var ms = new MemoryStream();
        serializer.WriteObject(ms, obj);
        string retVal = Encoding.UTF8.GetString(ms.ToArray());
        ms.Dispose();
        return retVal;
    }

    public static T Deserialize<T>(string json)
    {
        T obj = Activator.CreateInstance<T>();
        var ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
        var serializer = new DataContractJsonSerializer(obj.GetType());
        obj = (T)serializer.ReadObject(ms);
        ms.Close();
        ms.Dispose();
        return obj;
    }
}

Objektet som skall serialiseras behöver några extra taggar på sig ex:

[DataContract]
public class Person
{
    [DataMember(Name="firstName")]
    public string FirstName { get; set; }

    [DataMember(Name="lastName")]
    public string LastName { get; set; }
}

För att serialisera/deserialisera skriver man så här:

var myPerson = new Person()
{
    FirstName = "John",
    LastName = "Doe"
};

// Serialize
string json = JSONHelper.Serialize<Person>(myPerson);

// Deserialize
myPerson = JSONHelper.Deserialize<Person>(json);

Koden är i princip identisk med http://pietschsoft.com/post/2008/02/NET-35-JSON-Serialization-using-the-DataContractJsonSerializer.aspx. Jag har bara ändrat från default encoding till utf8.