刚刚下载了ServiceStack.Text在我的ASP.NET中使用它。我有很多属性的课程,并希望将其中的五个(字符串,整数,二进制)序列化。谁能发布简单的示例如何从我的班级中创建JSON对象?

有帮助吗?

解决方案

默认情况下,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上的静态实用方法来序列化,或者更简洁的扩展方法,例如:

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

编辑:

正如@noah提到的那样(从评论中),您还可以使用[忽略的AtaMember]属性来排除单个属性。

其他提示

您可以使用 [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

ServiceStack的测试证明了通过提供 [DataContract][DataMember] 属性允许您确定哪个正在序列化,哪些未被序列化。

测试: https://github.com/servicestack/servicestack.text/blob/master/tests/servicestack.text.test.test.tests/datacontracktests.cs

测试中的对象: https://github.com/servicestack/servicestack.text/blob/master/tests/servicestack.text.text.tests/support/support/ddndtos.cs

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top