ServiceStack.Text 和 DeserializeFromString 其中 Json 名称是非法的
ServiceStack.Text and DeserializeFromString where Json names are illegal
我已经使用 ServiceStack.Text DeserializeFromString 很长时间了,但是在一个新项目中我遇到了一个问题。
我需要解析为对象的JSON格式如下:
{"http://SomeUrl.com/":{"http://otherUrl.org/schema#name":[{"value":"val1","type":"val2"}]}}
因此对象名称以 URL 为前缀,因此我无法将其与 class 成员名称匹配。我试过使用 DataContract 来映射名称,但它只是 returns 个空对象。
是否有另一种方法可以使用 ServiceStack.Text 执行此操作,或者我是否需要手动解析 JSON?
如有任何帮助,我们将不胜感激。
编辑:
经过一番尝试,我设法使用 DataContract 属性解决了这个问题。之前它失败了,因为我指定的 classes 前缀不正确。我设法像这样解决它:
[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; }
}
手动解析它会更容易,您可以这样做:
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
我已经使用 ServiceStack.Text DeserializeFromString 很长时间了,但是在一个新项目中我遇到了一个问题。
我需要解析为对象的JSON格式如下:
{"http://SomeUrl.com/":{"http://otherUrl.org/schema#name":[{"value":"val1","type":"val2"}]}}
因此对象名称以 URL 为前缀,因此我无法将其与 class 成员名称匹配。我试过使用 DataContract 来映射名称,但它只是 returns 个空对象。
是否有另一种方法可以使用 ServiceStack.Text 执行此操作,或者我是否需要手动解析 JSON?
如有任何帮助,我们将不胜感激。
编辑:
经过一番尝试,我设法使用 DataContract 属性解决了这个问题。之前它失败了,因为我指定的 classes 前缀不正确。我设法像这样解决它:
[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; }
}
手动解析它会更容易,您可以这样做:
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