2011-12-20 20 views
2

我正在使用Twitter API,通过C#和DataContracts访问它。通过C#中的DataContracts在JSON中读取时的可选字段

我在阅读地理区域时遇到困难。问题是,有时它包含的子领域,而有时则是空:

"geo":{"coordinates":[52.5112,13.3577],"type":"Point"} 

"geo":null 

我与

[DataContract] 
public class Geo 
{ 
    [DataMember(Name = "coordinates")] 
    public string Coordinates { get; set; } 
} 

我得到的错误尝试,它是:

“反序列化类型为Twitter.S的对象时发生错误earchResults。从预期的命名空间''结束元素“坐标”。找到的元素从命名空间“项目”“”。”

好像解析器打了一个空,但预期坐标领域。据我所知,我告诉解析器期望‘坐标’,所以当然它抱怨。但我不知道如何让这个字段可选

+0

您是否尝试过使用公共字符串坐标;而不是财产? – ChrisBD 2011-12-20 14:42:51

+1

@ChrisBD:这是错误的路要走。 'DataContract'不适用于实例变量。它需要属性。当MSDN例子只是这样做时,有趣的事情是 – Codo 2011-12-20 15:38:31

+0

。 http://msdn.microsoft.com/en-us/library/ms729813.aspx – ChrisBD 2011-12-20 16:04:46

回答

3

如果我没有弄错,所有的属性/字段默认是可选的,问题似乎是坐标不是字符串属性,而是浮点数数组

所以要修复它,请尝试:

[DataContract] 
public class Geo 
{ 
    [DataMember(Name = "coordinates")] 
    public double[] Coordinates { get; set; } 
} 
+0

+1 - 没有注意到。做得好。 – ChrisBD 2011-12-20 16:12:07

相关问题