ServiceStack.Text, как сериализовать класс в JSon - PullRequest
12 голосов
/ 05 сентября 2011

Только что скачал ServiceStack.Text, чтобы использовать его в моем ASP.NET.У меня есть класс со многими свойствами, и я хотел бы сериализовать пять из них (строка, целое, двоичное) в JSON.Может кто-нибудь опубликовать простой пример, как создать объект JSon из моего класса?

Ответы [ 3 ]

19 голосов
/ 06 сентября 2011

ServiceStack по умолчанию десериализует все открытые свойства POCO.

Если вы хотите сериализовать только несколько свойств, то вы хотите украсить свой класс атрибутами [DataContract], [DataMember] (так же, как если бы вы использовали MS DataContractJsonSerializer), например:

[DataContract]
public class MyClass
{
    public string WillNotSerializeString { get; set; }

    [DataMember]
    public string WillSerializeString { get; set; }

    [DataMember]
    public int WillSerializeInt { get; set; }

    [DataMember]
    public byte[] WillSerializeByteArray { get; set; }
}

Затем вы можете использовать либо методы статической утилиты в JsonSerializer для (De) сериализации, либо более краткие методы расширения, например:

var dto = new MyClass { WillSerializeString = "some text" };
string json = dto.ToJson();
MyClass fromJson = json.FromJson<MyClass>();

Редактировать:

Как упоминает @Noah (из комментариев), вы также можете использовать атрибут [IgnoreDataMember] для исключения одного свойства.

6 голосов
/ 05 сентября 2011

Вы можете использовать атрибут [Serializable()] в своем пользовательском классе, а затем:

JavaScriptSerializer serializer = new JavaScriptSerializer();

var Json = serializer.Serialize(myObject);

Чтобы игнорировать определенные свойства сериализуемого объекта, просто поместите на них атрибут [NonSerialized].

Обновление:

Учитывая, что вы хотите использовать ServiceStack для сериализации, на сайте ServiceStack приведен следующий пример:

var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);

Источник: http://www.servicestack.net/mythz_blog/?p=344

1 голос
/ 12 апреля 2012
Тест

servicestack подтверждает, что, предоставляя атрибуты [DataContract] и [DataMember], вы можете определить, какой из них сериализуется, а какой нет.

Тест: https://github.com/ServiceStack/ServiceStack.Text/blob/master/tests/ServiceStack.Text.Tests/DataContractTests.cs

объектов в тесте: https://github.com/ServiceStack/ServiceStack.Text/blob/master/tests/ServiceStack.Text.Tests/Support/DdnDtos.cs

...