2

我已经使用 ServiceStack.Text DeserializeFromString 很长时间了,但是在一个新项目中我遇到了一个问题。

我需要解析为对象的 JSON 格式如下:

{"http://SomeUrl.com/":{"http://otherUrl.org/schema#name":[{"value":"val1","type":"val2"}]}}

所以对象名称以 URL 为前缀,所以我无法将其与类成员名称匹配。我尝试使用 DataContract 来映射名称,但它只返回空对象。

是否有另一种使用 ServiceStack.Text 的方法,还是我需要手动解析 JSON?

任何帮助,将不胜感激。

编辑:

经过一番尝试,我设法使用 DataContract 属性解决了这个问题。之前它失败了,因为我指定的类的前缀不正确。我设法像这样解决它:

[DataContract]
public class Schools
{
    [DataMember(Name = "http://demo.talisaspire.com/")]
    public Items Items { get; set; }
}

[DataContract]
public class Items
{

    [DataMember(Name = "http://purl.org/vocab/aiiso/schema#code")]
    public IEnumerable<Element> Code { get; set; }

    [DataMember(Name = "http://purl.org/vocab/aiiso/schema#knowledgeGrouping")]
    public IEnumerable<Element> KnowledgeGrouping { get; set; }

    [DataMember(Name = "http://purl.org/vocab/aiiso/schema#name")]
    public IEnumerable<Element> Name { get; set; }

    [DataMember(Name = "http://purl.org/vocab/aiiso/schema#organizationalUnit")]
    public IEnumerable<Element> OrganizationalUnit { get; set; }

    [DataMember(Name = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type")]
    public IEnumerable<Element> Type { get; set; }

}

public class Element
{
    public string Type { get; set; }
    public string Value { get; set; }
} 
4

1 回答 1

1

手动解析它会更容易,您可以这样做:

var obj = JsonObject.Parse(json)
    .Object("http://SomeUrl.com/");

var items = obj.ArrayObjects("http://otherUrl.org/schema#name")[0];

var value = items["value"]; //= val1
var type = items["type"];   //= val2
于 2015-07-02T13:21:49.107 回答