2011-09-08 151 views
3

我无法管理为属性指定自定义名称。我从服务器收到一些JSON(我无法更改),并带有一些难看的属性名称。我希望C#代码坚持命名约定。自定义DataMember名称以反序列化JSON类

下面是我的代码(result0.StringValue保持空):

[TestClass()] 
    public class WebServiceResultConverterTest 
    { 
    [DataContract(Name = "SimpleObject")] 
    private class SimpleObject 
    { 
     [DataMember(Name = "str_value")] 
     public String StringValue { get; set; } 

     [DataMember(Name = "int_value")] 
     public String IntValue { get; set; } 
    } 

    [TestMethod()] 
    public void DeserializeTest() 
    { 
     String input0 = @"{ 
      ""str_value"": ""This is a test string"", 
      ""int_value"": 1664 
     }"; 

     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     SimpleObject result0 = serializer.Deserialize<SimpleObject>(input0); 

     Assert.AreEqual("This is a test string", result0.StringValue); 
     Assert.AreEqual(1664, result0.IntValue); 
    } 
    } 

回答

4

您需要使用这些属性使用DataContractJsonSerializer。我相信JavascriptSerializer现在已经过时了.Net 3.5。

+0

谢谢,这是有效的。有没有任何意思指定一些自定义的方式来解析一些数据成员的JSON? –

+0

这取决于你需要什么样的控制。我发现JSON.NET http://json.codeplex.com/允许更多的控制数据合同。你可以创建'JSONConverter's。否则,您可以创建代理类来定义如何使用数据契约序列化 - http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.idatacontractsurrogate.aspx –

相关问题