Reputation: 597
We have the FHIR JSON model which needs to be serialized using protobuf but we are not able to serialize it as the JSON is not getting parsed to the generated google fhir models. https://github.com/google/fhir
FHIR JSON:
{
"resourceType" : "Bundle",
"id" : "bundle-transaction",
"meta" : {
"lastUpdated" : "2014-08-18T01:43:30Z"
},
"type" : "transaction",
"entry" : [{
"fullUrl" : "urn:uuid:61ebe359-bfdc-4613-8bf2-c5e300945f0a",
"resource" : {
"resourceType" : "Patient",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
},
"active" : true,
"name" : [{
"use" : "official",
"family" : "Chalmers",
"given" : ["Peter",
"James"]
}],
"gender" : "male",
"birthDate" : "1974-12-25"
},
"request" : {
"method" : "POST",
"url" : "Patient"
}
},
{
"fullUrl" : "urn:uuid:88f151c0-a954-468a-88bd-5ae15c08e059",
"resource" : {
"resourceType" : "Patient",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
},
"identifier" : [{
"system" : "http:/example.org/fhir/ids",
"value" : "234234"
}],
"active" : true,
"name" : [{
"use" : "official",
"family" : "Chalmers",
"given" : ["Peter",
"James"]
}],
"gender" : "male",
"birthDate" : "1974-12-25"
},
"request" : {
"method" : "POST",
"url" : "Patient",
"ifNoneExist" : "identifier=http:/example.org/fhir/ids|234234"
}
},
{
"fullUrl" : "http://example.org/fhir/Patient/123",
"resource" : {
"resourceType" : "Patient",
"id" : "123",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
},
"active" : true,
"name" : [{
"use" : "official",
"family" : "Chalmers",
"given" : ["Peter",
"James"]
}],
"gender" : "male",
"birthDate" : "1974-12-25"
},
"request" : {
"method" : "PUT",
"url" : "Patient/123"
}
},
{
"fullUrl" : "urn:uuid:74891afc-ed52-42a2-bcd7-f13d9b60f096",
"resource" : {
"resourceType" : "Patient",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
},
"identifier" : [{
"system" : "http:/example.org/fhir/ids",
"value" : "456456"
}],
"active" : true,
"name" : [{
"use" : "official",
"family" : "Chalmers",
"given" : ["Peter",
"James"]
}],
"gender" : "male",
"birthDate" : "1974-12-25"
},
"request" : {
"method" : "PUT",
"url" : "Patient?identifier=http:/example.org/fhir/ids|456456"
}
},
{
"fullUrl" : "http://example.org/fhir/Patient/123a",
"resource" : {
"resourceType" : "Patient",
"id" : "123a",
"text" : {
"status" : "generated",
"div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\">Some narrative</div>"
},
"active" : true,
"name" : [{
"use" : "official",
"family" : "Chalmers",
"given" : ["Peter",
"James"]
}],
"gender" : "male",
"birthDate" : "1974-12-25"
},
"request" : {
"method" : "PUT",
"url" : "Patient/123a",
"ifMatch" : "W/\"2\""
}
},
{
"request" : {
"method" : "DELETE",
"url" : "Patient/234"
}
},
{
"request" : {
"method" : "DELETE",
"url" : "Patient?identifier=123456"
}
},
{
"fullUrl" : "urn:uuid:79378cb8-8f58-48e8-a5e8-60ac2755b674",
"resource" : {
"resourceType" : "Parameters",
"parameter" : [{
"name" : "coding",
"valueCoding" : {
"system" : "http://loinc.org",
"code" : "1963-8"
}
}]
},
"request" : {
"method" : "POST",
"url" : "http://hl7.org/fhir/ValueSet/$lookup"
}
},
{
"request" : {
"method" : "GET",
"url" : "Patient?name=peter"
}
},
{
"request" : {
"method" : "GET",
"url" : "Patient/12334",
"ifNoneMatch" : "W/\"4\"",
"ifModifiedSince" : "2015-08-31T08:14:33+10:00"
}
}]
}
And the code that we have used to serialize it is as shown below:
static void Main(string[] args)
{
// Load the FHIR JSON bundle
//FHIR JSON from the above
string fhirJson = File.ReadAllText("REFER THE ABOVE FHIR JSON");
// Parse the FHIR JSON bundle
var jsonParser = new JsonParser(JsonParser.Settings.Default.WithIgnoreUnknownFields(true));
var bundle = jsonParser.Parse<Bundle>(fhirJson);
// Serialize the bundle to Protobuf
byte[] protobufData;
using (var memoryStream = new MemoryStream())
{
bundle.WriteTo(memoryStream);
protobufData = memoryStream.ToArray();
}
// Save the Protobuf data to a file
File.WriteAllBytes("fhir_bundle.protobuf", protobufData);
Console.WriteLine("FHIR bundle converted to Protobuf and saved to fhir_bundle.protobuf");
}
We are using the R4 version.
This is resulting in an exception Google.Protobuf.InvalidProtocolBufferException.
Upvotes: 0
Views: 50