Отобразить сущность в JSON с помощью JavaScriptSerializer - PullRequest
8 голосов
/ 18 июня 2011

Мои сущности такие:

class Address
{
     public string Number { get; set; }
     public string Street { get; set; }
     public string City { get; set; }
     public string Country { get; set; }
}

class Person
{
     public string Name { get; set; }
     public int Age { get; set; }
     public Address PostalAddress { get; set; }
}

Person newPerson = 
    new Person()
    {
       Name = "Kushan",
       Age = 25,
       PostalAddress = 
           new Address()
           {
               Number = "No 25",
               Street = "Main Street",
               City = "Matale",
               Country = "Sri Lanka"
           }
    };

Теперь я хочу отобразить этот объект newPerson в объект JSON следующим образом:

{ 
     "PER_NAME" : "Kushan",
     "PER_AGE" : "25",
     "PER_ADDRESS" : {
                          "ADD_NUMBER" : "No 25",
                          "ADD_STREET" : "Main Street",
                          "ADD_CITY" : "Matale",
                          "ADD_COUNTRY" : "Sri Lanka"
                     }
}

Примечание. Выше приведен только пример.

Мне нужно настроить ключ во время сериализации. по умолчанию он принимает имя свойства в качестве ключа. Я не могу изменить имена свойств. Как это сделать?

Также возможно ли изменить порядок появления пар ключ-значение в JSON obj.?

Ответы [ 2 ]

8 голосов
/ 18 июня 2011

Вам необходимо добавить DataContract атрибуты для ваших классов и DataMember для свойств.Установите для свойства Name атрибута DataMemeber имя настраиваемого свойства и для свойства Order определите порядок.

[DataContract]
public class Person
{
    [DataMember(Name = "PER_NAME", Order = 1)]
    public string Name { get; set; }

    [DataMember(Name = "PER_AGE", Order = 2)]
    public int Age { get; set; }

    [DataMember(Name = "PER_ADDRESS", Order = 3)]
    public Address PostalAddress { get; set; }
}

Затем вы можете сделать это:

var newPerson = new Person()
{
    Name = "Kushan",
    Age = 25,
    PostalAddress = new Address()
    {
        Number = "No 25",
        Street = "Main Street",
        City = "Matale",
        Country = "Sri Lanka"
    }
};

MemoryStream stream = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
ser.WriteObject(stream, newPerson);

Комупроверьте результат:

var result = Encoding.ASCII.GetString(stream.ToArray());

{"PER_NAME":"Kushan","PER_AGE":25,"PER_ADDRESS":{"ADD_NUMBER":"No 25","ADD_STREET":"Main Street","ADD_CITY":"Matale","ADD_COUNTRY":"Sri Lanka"}}
5 голосов
/ 18 июня 2011

Вы можете сериализовать анонимный тип с помощью JavaScriptSerializer, так что вы можете попробовать проецировать ваш объект в форму, которую вы хотите сериализовать:

person.Select(s => new { PER_NAME = s.Name, PER_AGE = s.Age });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...