2

ServiceStack.Text DeserializeFromString を長い間使用してきましたが、新しいプロジェクトで問題が発生しました。

オブジェクトに解析する必要がある JSON の形式は次のとおりです。

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

そのため、オブジェクト名には URL がプレフィックスとして付けられているため、それをクラス メンバー名と照合することはできません。名前をマップするために DataContract を使用しようとしましたが、null オブジェクトを返すだけです。

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 に答える