2012-02-29 40 views
4

我需要从服务器解析JSON数据并制作对象状态列表。DataContract和自定义设置/从字符串设置DateTime

我使用DataContract为了使json字典字段和类属性之间的关联,但是我有一个问题:其中一个字段包含字符串中的日期(类似于“2011-01-01 15 :00 UTC“);我想把这里面的DateTime属性。

如何将此字符串转换为日期时间并使用DataContract自动将其传递给属性?那可能吗?

+0

如果您想要使用Json.Net [这里](http://stackoverflow.com/questions/8639315/how-to-create-a-json-net-date-to-string-custom-converter)是一个答案。 – 2012-02-29 13:45:03

+0

事实上,我选择DataContract是因为它允许我从JSON字典轻松转换为运行时类。 JSON.net有什么区别? – danielemm 2012-02-29 16:12:08

+1

您对序列化/反序列化过程有更多的控制权。在我之前的评论中看到ex的链接。你也可以很容易地使用'dynamic',因为它可以将对象反序列化为字典。这里有一些工作示例。 http://pastebin.com/JEYfgL3a。最好看看[它的主页](http://json.codeplex.com/) – 2012-02-29 19:21:59

回答

7

你可以使用属性为宗旨:

[DataMember(Name="Foo")] 
public string FormattedFoo { 
    get { return /* apply some custom formatting to 'Foo' */; } 
    set { Foo = /* apply some custom parsing to 'value' */; } 
} 
public DateTime Foo {get;set;} 
+0

我按照你的建议尝试了,但是我有这个错误:http://pastebin.com/jbtDej3C。任何想法marc? – danielemm 2012-03-01 14:07:44

+0

@malcom是否使用解析?或ParseExact?要么...?什么是样本输入? – 2012-03-01 14:20:05

+0

解析和解析确切返回相同的错误。值是一个字符串,形式为“2012/01/01 00:00:00” – danielemm 2012-03-01 14:24:27

0

DataMember属性的领域,而不是财产和使用的setter /吸气进行转换:

const string DATE_TIME_FORMAT = "<your format>"; 

[DataMember] 
string myDate; 

public DateTime MyDate { 
    get 
    { 
    return DateTime.ParseExact(myDate, DATE_TIME_FORMAT, CultureInfo.CurrentCulture); 
    } 
    set 
    { 
    myDate = value.ToString(DATE_TIME_FORMAT); 
    } 
}